From a39f6b38ff7fbe4753d547075f345bffcdef0e4b Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Thu, 21 Aug 2025 00:18:29 +0200 Subject: [PATCH 001/139] =?UTF-8?q?le=20layout=20progresse=20via=20une=20p?= =?UTF-8?q?rogression=20sans=20RISQUE=20=F0=9F=97=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/.gitignore | 33 +++++ web/.idea/Beacon web.iml | 13 +- web/.idea/misc.xml | 1 + web/routes/web.py | 5 + web/static/dashboard.css | 0 web/static/resources/fabric.png | Bin 0 -> 599 bytes web/static/resources/forge.png | Bin 0 -> 27370 bytes ...gtungtungtungtungtungtungtungtungsahur.png | Bin 0 -> 30968 bytes web/static/resources/vanilla.png | Bin 0 -> 42273 bytes web/static/style.css | 131 ++++++++++++++++++ web/templates/base.html | 8 +- web/templates/dashboard.html | 33 +++++ web/templates/homepage.html | 2 +- 13 files changed, 209 insertions(+), 17 deletions(-) create mode 100644 web/static/dashboard.css create mode 100644 web/static/resources/fabric.png create mode 100644 web/static/resources/forge.png create mode 100644 web/static/resources/tungtungtungtungtungtungtungtungtungsahur.png create mode 100644 web/static/resources/vanilla.png create mode 100644 web/static/style.css create mode 100644 web/templates/dashboard.html diff --git a/web/.gitignore b/web/.gitignore index d09cadc..dabc110 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -280,4 +280,37 @@ fabric.properties # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij .idea/**/azureSettings.xml +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + # End of https://www.toptal.com/developers/gitignore/api/pycharm,flask diff --git a/web/.idea/Beacon web.iml b/web/.idea/Beacon web.iml index 4a91483..2c80e12 100644 --- a/web/.idea/Beacon web.iml +++ b/web/.idea/Beacon web.iml @@ -1,21 +1,10 @@ - - - + - - - \ No newline at end of file diff --git a/web/.idea/misc.xml b/web/.idea/misc.xml index fa2cb8d..45cf798 100644 --- a/web/.idea/misc.xml +++ b/web/.idea/misc.xml @@ -3,4 +3,5 @@ + \ No newline at end of file diff --git a/web/routes/web.py b/web/routes/web.py index 1cb242a..f587229 100644 --- a/web/routes/web.py +++ b/web/routes/web.py @@ -5,4 +5,9 @@ web_bp = Blueprint("web", __name__) @web_bp.route("/") def homepage(): return render_template("homepage.html") +# end def + +@web_bp.route("/dashboard") +def dashboard(): + return render_template("dashboard.html") # end def \ No newline at end of file diff --git a/web/static/dashboard.css b/web/static/dashboard.css new file mode 100644 index 0000000..e69de29 diff --git a/web/static/resources/fabric.png b/web/static/resources/fabric.png new file mode 100644 index 0000000000000000000000000000000000000000..bab3ad5d678860b4ad79ad9b88c4e97ee820aad0 GIT binary patch literal 599 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 literal 0 HcmV?d00001 diff --git a/web/static/resources/tungtungtungtungtungtungtungtungtungsahur.png b/web/static/resources/tungtungtungtungtungtungtungtungtungsahur.png new file mode 100644 index 0000000000000000000000000000000000000000..72e992dd0e5a0df5df79ff79e4196407e79ba20a GIT binary patch literal 30968 zcmWIYbaVSq!N3si>J$(bVBzz)f`LKbs?krt*COY(+a!Va<;7vY^efWlFKO!d=kHLH zB_p`-`FxI>4(%+P8k+iP@!{`$YGq z0HfWF2OMUq)jD4e#$4C zX3Pt-iTRMD=si*8dYRL`*?-r2&Hwe~Ux5VQ;f0d3rcL+DW}PH*yG&WL!e-L(=ZbQR zR_(pG;^p7cNN4GhWpv>)d4MwoJFR;hTOoar2A+EDtWF^lN_m zptU&d`e%LiTkSh%GT6s`Yu~v)&UR;J@a4&id?pKdo$KA!(edP6Oynjj)0H2)%zRHw z^b8U>x$N`>mlk1J*AGXQ?Y1~5d%{5=XQOQF<=*m5D$7#1%x1qj)buv+&#j}1DbvIE zuR6PMnyORlFY{+o>uU_Iw(VN;M3DEOw)~7-p6(EJ_5Mv2%bUzrxLo47{G1{Gm%#$H z#X04M-LwBITE03lNy+S%vHgubS~s(8qr9$dk9^g3@Vx3xvUjH|DtOMaK7ovfd9_)mz8Ox`N9 zi>I_Fg*;v-vi)t@wJ^7ZJf*WAatS`_-`0EJN`Q0k&%ntO^tY^yf4!$oZg-#m<2_f4 zM9*E=yWev0{O{|swJm=8bc*l4HGyfmzSKd6yARh$@ZI>P#qi_ul;^F%F{}?5c6UEo zrf&Q26wj*w2DS@#=Gy)JePQ#2XR!=7Bpb_%PfpAHxk%1_Rq3x!>lhE*aIdheaZIl} ztgw-ZVO`g&aJxO94*qMrYFJ~uQRx1sZlRMhhHvD}q$&hwTvFU`!GHDn+8J5&mycWqVID zes1@CpTA8+np;}oId823J!e<(Rs0!@Dh^J@7u3&Hek%C>|NidpZ&Y{u{?9ng+|_?m z?&)p0yL~fj&ul%vTc5?eMPL(C%LEgbi6TqhR+q20tokhBxh?DVw%p2Tmwv@apR=4E z=oI$Zt1va;R`I!eUZ+a8pdObBKdTZ`&&8^$69git~Un|#nGkx2W*ZaRHZ%Wzp#L(E-c=ML? zmcQ4Sy1!pr_2B>i+DkdV=cznQXR;Sm*6L$k$nGv1Ytg^B?0xB*z2EOuzu)`);o}$Y zHhwR;czCboG%xL{kgkM6*8>wW6h5YN2s3DY=>EF>mH(0CeLnRSX;&}azVZF|x9a!z zuD+jkDOW%%_~5%P_f$y+hYMevd5n%#<$p2Tzkl}Y{eNoI!sb=(onPr7_u%BS*Pq>` zBjTs+{ipx$%V*E^Hy@vg`)1p~CRFO3s8ngeuVc-^Ai=@FV|90P(Vy2puNw=N$*0%W za`}JHDCbxB{N$1MXZGj1)pj3_?f=Q#JvlBtbw-K z;KkK_eIfrUPdFZWqj~YHz}7ae8wYE)D?Yhx=kU?<$p7CL?dN?9J%4=fy&q5O|NWje z|Ej?~i`g%iPuY0NnTernh5>hT&4hMd1_vF6h6U@N%6zt(CvMqsL#`vB?fwIsoj)g; ze%JriJL&(qSJO)v&)Fyb(6|5RK3T1F@%q2F)Ykt@to3)#ky^G=>ST}9xx<_ccO0il zN~AqxWN@fy*tGuXmwC5~LpWwIv!oWZFPo|3S|8NqbME}V+BzFKmJ<8O3%BM^`TB2O zjgh(HwP!3o#+eQr#-T?()-Wctvqh#}6qPq&VPIfpEI4yrF6{iQRdOmz%#s4wEQ%av zBo;QQ3m>|zIO}@8*q7#pKf=xXf3fekpZII%iv2%lUHh)@p1bNHm!JO=^*c-ldjlF0 zTE3XKCce3#!2hdRGU9L2&ldkTYiB?HJatdULcX;JB|D?j6fUqbb`OIM{lvr|ROM`V>DYC-m^=HwSiAqZbpLVT*A%Q{VpLyk?=~G|u9Qssx_|MNB^P;~#`&qyJ z-_ifS^!xu6{?C5;XXTa*)$rgn1NK&j360DR8xl7*hzomc_`1@EF@c?n)qo+v@G5_8 z-3jBq(?3|he%t>|?C~x8Kd;j*YGF(X~qXmh8iXY9g)6hwFsl`*vzjh_cgBi?R?¡># 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 literal 0 HcmV?d00001 diff --git a/web/static/resources/vanilla.png b/web/static/resources/vanilla.png new file mode 100644 index 0000000000000000000000000000000000000000..7642332fbb6636f4c30ce9fd68cd695c874eda9e GIT binary patch literal 42273 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 KT-G@yGywprTsoit literal 0 HcmV?d00001 diff --git a/web/static/style.css b/web/static/style.css new file mode 100644 index 0000000..145d7d1 --- /dev/null +++ b/web/static/style.css @@ -0,0 +1,131 @@ +:root +{ + --icon_size: 42px; + --one_third: calc(100%/3); + --rounded_corners_graphs: 24px; +} + +body +{ + background-color: #111; + color: white; + font-family: "Montserrat", sans-serif; + overflow: hidden; +} + +h1 +{ + font-size: 50px; + text-transform: uppercase; + font-weight: regular; + line-height: 48px; + margin: 0px; +} + +p +{ + line-height: 24px; +} + +#dashboard-main-section +{ + background-color: inherit; + display: grid; + grid-template-columns: 50% 50%; + left: 0px; + margin-left: 3vh; + margin-right: 3vh; + margin-top: 2vh; + overflow: hidden; + height: 100vh; + padding-right: var(--one_third); + width: 100%; +} +#dashboard-main-section > div +{ + background-color: red; + border-radius: var(--rounded_corners_graphs); + justify-content: center; + margin-bottom: 1vh; + margin-right: 1vh; + text-align: center; +} +#dashboard-main-section > div:nth-child(even) +{ + background-color: orangered; +} + +#dashboard-page +{ + display: flex; + flex-direction: row; + overflow: hidden; +} + +#dashboard-right-pane +{ + background-color: #222; + border-radius: 36px; + display: flex; + flex-direction: column; + height: 100vh; + justify-content: center; + margin-right: 3vh; + margin-top: 2vh; + overflow: hidden; + position: absolute; + right: 0px; + text-align: center; + width: var(--one_third); +} + +#data-column +{ + font-weight: bold; + padding-right: 10%; + text-align: right; + width: 50%; +} + +#description +{ + color: #ddd; + font-weight: lighter; +} + +#label-data-columns +{ + display: flex; + flex-direction: row; + height: var(--one_third); + padding-top: 36px; + justify-content: center; +} + +#labels-column +{ + color: #666; + font-style: italic; + padding-left: 10%; + text-align: left; + width: 50%; +} + +#separator +{ + margin: 0px; + padding: 0px; +} + +#server-type-icon +{ + border-radius: 6px; + height: var(--icon_size); + max-height: var(--icon_size); + max-width: var(--icon_size); + margin-bottom: 0px; + margin-left: auto; + margin-right: auto; + margin-top: 0px; + width: var(--icon_size); +} \ No newline at end of file diff --git a/web/templates/base.html b/web/templates/base.html index 49940b5..b1f1f8a 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -2,13 +2,13 @@ - {% block title %}Beacon{% endblock %} + Beacon + + + -
-

Beacon

-
{% block content %}{% endblock %}
diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html new file mode 100644 index 0000000..b56e946 --- /dev/null +++ b/web/templates/dashboard.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} + + +{% block title %}{{ super }} - Dashboard{% endblock %} + +{% block content %} +
+
+
Slot 1
+
Slot 2
+
Tables/Kanban (logs joueurs) ?
+
Jauges ?
+
+ +
+{% endblock %} diff --git a/web/templates/homepage.html b/web/templates/homepage.html index f32add9..c32a7af 100644 --- a/web/templates/homepage.html +++ b/web/templates/homepage.html @@ -3,5 +3,5 @@ {% block title %}{{ super }} - Homepage{% endblock %} {% block content %} -

Server List:

+

TODO la transition stylée où on plonge dans la balise

{% endblock %} -- GitLab From 86f13e63e55030f40d6d52f51d979ae8ae07c5fc Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Fri, 22 Aug 2025 12:51:48 +0200 Subject: [PATCH 002/139] Ajout de UIKit et replacement des div (prise de RISQUE) --- web/static/style.css | 9 +- web/static/uikit/css/uikit-rtl.css | 13125 +++++++++++++++++++++++ web/static/uikit/css/uikit-rtl.min.css | 1 + web/static/uikit/css/uikit.css | 13125 +++++++++++++++++++++++ web/static/uikit/css/uikit.min.css | 1 + web/static/uikit/js/uikit-icons.js | 184 + web/static/uikit/js/uikit-icons.min.js | 1 + web/static/uikit/js/uikit.js | 9955 +++++++++++++++++ web/static/uikit/js/uikit.min.js | 1 + web/templates/base.html | 4 + web/templates/dashboard.html | 8 +- 11 files changed, 36406 insertions(+), 8 deletions(-) create mode 100644 web/static/uikit/css/uikit-rtl.css create mode 100644 web/static/uikit/css/uikit-rtl.min.css create mode 100644 web/static/uikit/css/uikit.css create mode 100644 web/static/uikit/css/uikit.min.css create mode 100644 web/static/uikit/js/uikit-icons.js create mode 100644 web/static/uikit/js/uikit-icons.min.js create mode 100644 web/static/uikit/js/uikit.js create mode 100644 web/static/uikit/js/uikit.min.js diff --git a/web/static/style.css b/web/static/style.css index 145d7d1..a1882b4 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -9,7 +9,7 @@ body { background-color: #111; color: white; - font-family: "Montserrat", sans-serif; + font-family: "Montserrat", sans-serif !important; overflow: hidden; } @@ -31,7 +31,8 @@ p { background-color: inherit; display: grid; - grid-template-columns: 50% 50%; + grid-template-columns: var(--one_third) var(--one_third) var(--one_third); + grid-template-rows: 50% 50%; left: 0px; margin-left: 3vh; margin-right: 3vh; @@ -50,9 +51,9 @@ p margin-right: 1vh; text-align: center; } -#dashboard-main-section > div:nth-child(even) +#dashboard-main-section > div:last-child { - background-color: orangered; + grid-column: 4/1; } #dashboard-page diff --git a/web/static/uikit/css/uikit-rtl.css b/web/static/uikit/css/uikit-rtl.css new file mode 100644 index 0000000..2d9e741 --- /dev/null +++ b/web/static/uikit/css/uikit-rtl.css @@ -0,0 +1,13125 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */ +/* ======================================================================== + Component: Base + ========================================================================== */ +/* + * 1. Set `font-size` to support `rem` units + * 2. Prevent adjustments of font size after orientation changes in iOS. + * 3. Style + */ +html { + /* 1 */ + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 16px; + font-weight: normal; + line-height: 1.5; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 3 */ + background: #fff; + color: #666; +} +/* + * Remove the margin in all browsers. + */ +body { + margin: 0; +} +/* Links + ========================================================================== */ +/* + * Style + */ +a, +.uk-link { + color: #1e87f0; + text-decoration: none; + cursor: pointer; +} +a:hover, +.uk-link:hover, +.uk-link-toggle:hover .uk-link { + color: #0f6ecd; + text-decoration: underline; +} +/* Text-level semantics + ========================================================================== */ +/* + * 1. Add the correct text decoration in Edge. + * 2. The shorthand declaration `underline dotted` is not supported in Safari. + */ +abbr[title] { + /* 1 */ + text-decoration: underline dotted; + /* 2 */ + -webkit-text-decoration-style: dotted; +} +/* + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} +/* + * 1. Consolas has a better baseline in running text compared to `Courier` + * 2. Correct the odd `em` font sizing in all browsers. + * 3. Style + */ +:not(pre) > code, +:not(pre) > kbd, +:not(pre) > samp { + /* 1 */ + font-family: Consolas, monaco, monospace; + /* 2 */ + font-size: 0.875rem; + /* 3 */ + color: #f0506e; + white-space: nowrap; + padding: 2px 6px; + background: #f8f8f8; +} +/* + * Emphasize + */ +em { + color: #f0506e; +} +/* + * Insert + */ +ins { + background: #ffd; + color: #666; + text-decoration: none; +} +/* + * Mark + */ +mark { + background: #ffd; + color: #666; +} +/* + * Quote + */ +q { + font-style: italic; +} +/* + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} +/* + * Prevents `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +/* Embedded content + ========================================================================== */ +/* + * Remove the gap between the element and the bottom of its parent container. + */ +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} +/* + * 1. Constrain the element to its parent width. + * 2. Preserve the intrinsic aspect ratio and auto-scale the height of an image if the `height` attribute is present. + * 3. Take border and padding into account. + */ +canvas, +img, +svg, +video { + /* 1 */ + max-width: 100%; + /* 2 */ + height: auto; + /* 3 */ + box-sizing: border-box; +} +/* + * Deprecated: only needed for `img` elements with `uk-img` + * 1. Hide `alt` text for lazy load images. + * 2. Fix lazy loading images if parent element is set to `display: inline` and has `overflow: hidden`. + */ +img:not([src]) { + /* 1 */ + visibility: hidden; + /* 2 */ + min-width: 1px; +} +/* + * Iframe + * Remove border in all browsers + */ +iframe { + border: 0; +} +/* Block elements + ========================================================================== */ +/* + * Margins + */ +p, +ul, +ol, +dl, +pre, +address, +fieldset, +figure { + margin: 0 0 20px 0; +} +/* Add margin if adjacent element */ +* + p, +* + ul, +* + ol, +* + dl, +* + pre, +* + address, +* + fieldset, +* + figure { + margin-top: 20px; +} +/* Headings + ========================================================================== */ +h1, +.uk-h1, +h2, +.uk-h2, +h3, +.uk-h3, +h4, +.uk-h4, +h5, +.uk-h5, +h6, +.uk-h6, +.uk-heading-small, +.uk-heading-medium, +.uk-heading-large, +.uk-heading-xlarge, +.uk-heading-2xlarge, +.uk-heading-3xlarge { + margin: 0 0 20px 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-weight: normal; + color: #333; + text-transform: none; +} +/* Add margin if adjacent element */ +* + h1, +* + .uk-h1, +* + h2, +* + .uk-h2, +* + h3, +* + .uk-h3, +* + h4, +* + .uk-h4, +* + h5, +* + .uk-h5, +* + h6, +* + .uk-h6, +* + .uk-heading-small, +* + .uk-heading-medium, +* + .uk-heading-large, +* + .uk-heading-xlarge, +* + .uk-heading-2xlarge, +* + .uk-heading-3xlarge { + margin-top: 40px; +} +/* + * Sizes + */ +h1, +.uk-h1 { + font-size: 2.23125rem; + line-height: 1.2; +} +h2, +.uk-h2 { + font-size: 1.7rem; + line-height: 1.3; +} +h3, +.uk-h3 { + font-size: 1.5rem; + line-height: 1.4; +} +h4, +.uk-h4 { + font-size: 1.25rem; + line-height: 1.4; +} +h5, +.uk-h5 { + font-size: 16px; + line-height: 1.4; +} +h6, +.uk-h6 { + font-size: 0.875rem; + line-height: 1.4; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + h1, + .uk-h1 { + font-size: 2.625rem; + } + h2, + .uk-h2 { + font-size: 2rem; + } +} +/* Lists + ========================================================================== */ +ul, +ol { + padding-right: 30px; +} +/* + * Reset margin for nested lists + */ +ul > li > ul, +ul > li > ol, +ol > li > ol, +ol > li > ul { + margin: 0; +} +/* Description lists + ========================================================================== */ +dt { + font-weight: bold; +} +dd { + margin-right: 0; +} +/* Horizontal rules + ========================================================================== */ +/* + * 1. Show the overflow in Chrome, Edge and IE. + * 2. Add the correct text-align in Edge and IE. + * 3. Style + */ +hr, +.uk-hr { + /* 1 */ + overflow: visible; + /* 2 */ + text-align: inherit; + /* 3 */ + margin: 0 0 20px 0; + border: 0; + border-top: 1px solid #e5e5e5; +} +/* Add margin if adjacent element */ +* + hr, +* + .uk-hr { + margin-top: 20px; +} +/* Address + ========================================================================== */ +address { + font-style: normal; +} +/* Blockquotes + ========================================================================== */ +blockquote { + margin: 0 0 20px 0; + font-size: 1.25rem; + line-height: 1.5; + font-style: italic; + color: #333; +} +/* Add margin if adjacent element */ +* + blockquote { + margin-top: 20px; +} +/* + * Content + */ +blockquote p:last-of-type { + margin-bottom: 0; +} +blockquote footer { + margin-top: 10px; + font-size: 0.875rem; + line-height: 1.5; + color: #666; +} +blockquote footer::before { + content: "— "; +} +/* Preformatted text + ========================================================================== */ +/* + * 1. Contain overflow in all browsers. + */ +pre { + font: 0.875rem / 1.5 Consolas, monaco, monospace; + color: #666; + -moz-tab-size: 4; + tab-size: 4; + /* 1 */ + overflow: auto; + padding: 10px; + border: 1px solid #e5e5e5; + border-radius: 3px; + background: #fff; +} +pre code { + font-family: Consolas, monaco, monospace; +} +/* Focus + ========================================================================== */ +:focus { + outline: none; +} +:focus-visible { + outline: 2px dotted #333; +} +/* Selection pseudo-element + ========================================================================== */ +::selection { + background: #39f; + color: #fff; + text-shadow: none; +} +/* HTML5 elements + ========================================================================== */ +/* + * 1. Add the correct display in Edge, IE 10+, and Firefox. + * 2. Add the correct display in IE. + */ +details, +main { + /* 2 */ + display: block; +} +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} +/* + * Add the correct display in IE. + */ +template { + display: none; +} +/* Pass media breakpoints to JS + ========================================================================== */ +/* + * Breakpoints + */ +:root { + --uk-breakpoint-s: 640px; + --uk-breakpoint-m: 960px; + --uk-breakpoint-l: 1200px; + --uk-breakpoint-xl: 1600px; +} +/* ======================================================================== + Component: Link + ========================================================================== */ +/* Muted + ========================================================================== */ +a.uk-link-muted, +.uk-link-muted a, +.uk-link-toggle .uk-link-muted { + color: #999; +} +a.uk-link-muted:hover, +.uk-link-muted a:hover, +.uk-link-toggle:hover .uk-link-muted { + color: #666; +} +/* Text + ========================================================================== */ +a.uk-link-text, +.uk-link-text a, +.uk-link-toggle .uk-link-text { + color: inherit; +} +a.uk-link-text:hover, +.uk-link-text a:hover, +.uk-link-toggle:hover .uk-link-text { + color: #999; +} +/* Heading + ========================================================================== */ +a.uk-link-heading, +.uk-link-heading a, +.uk-link-toggle .uk-link-heading { + color: inherit; +} +a.uk-link-heading:hover, +.uk-link-heading a:hover, +.uk-link-toggle:hover .uk-link-heading { + color: #1e87f0; + text-decoration: none; +} +/* Reset + ========================================================================== */ +/* + * `!important` needed to override inverse component + */ +a.uk-link-reset, +.uk-link-reset a { + color: inherit !important; + text-decoration: none !important; +} +/* Toggle + ========================================================================== */ +.uk-link-toggle { + color: inherit !important; + text-decoration: none !important; +} +/* ======================================================================== + Component: Heading + ========================================================================== */ +.uk-heading-small { + font-size: 2.6rem; + line-height: 1.2; +} +.uk-heading-medium { + font-size: 2.8875rem; + line-height: 1.1; +} +.uk-heading-large { + font-size: 3.4rem; + line-height: 1.1; +} +.uk-heading-xlarge { + font-size: 4rem; + line-height: 1; +} +.uk-heading-2xlarge { + font-size: 6rem; + line-height: 1; +} +.uk-heading-3xlarge { + font-size: 8rem; + line-height: 1; +} +/* Tablet Landscape and bigger */ +@media (min-width: 960px) { + .uk-heading-small { + font-size: 3.25rem; + } + .uk-heading-medium { + font-size: 3.5rem; + } + .uk-heading-large { + font-size: 4rem; + } + .uk-heading-xlarge { + font-size: 6rem; + } + .uk-heading-2xlarge { + font-size: 8rem; + } + .uk-heading-3xlarge { + font-size: 11rem; + } +} +/* Laptop and bigger */ +@media (min-width: 1200px) { + .uk-heading-medium { + font-size: 4rem; + } + .uk-heading-large { + font-size: 6rem; + } + .uk-heading-xlarge { + font-size: 8rem; + } + .uk-heading-2xlarge { + font-size: 11rem; + } + .uk-heading-3xlarge { + font-size: 15rem; + } +} +/* Primary + Deprecated: Use `uk-heading-medium` instead + ========================================================================== */ +/* Tablet landscape and bigger */ +/* Desktop and bigger */ +/* Hero + Deprecated: Use `uk-heading-xlarge` instead + ========================================================================== */ +/* Tablet landscape and bigger */ +/* Desktop and bigger */ +/* Divider + ========================================================================== */ +.uk-heading-divider { + padding-bottom: calc(5px + 0.1em); + border-bottom: calc(0.2px + 0.05em) solid #e5e5e5; +} +/* Bullet + ========================================================================== */ +.uk-heading-bullet { + position: relative; +} +/* + * 1. Using `inline-block` to make it work with text alignment + * 2. Center vertically + * 3. Style + */ +.uk-heading-bullet::before { + content: ""; + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + top: calc(-0.1 * 1em); + vertical-align: middle; + /* 3 */ + height: calc(4px + 0.7em); + margin-left: calc(5px + 0.2em); + border-right: calc(5px + 0.1em) solid #e5e5e5; +} +/* Line + ========================================================================== */ +/* + * Clip the child element + */ +.uk-heading-line { + overflow: hidden; +} +/* + * Extra markup is needed to make it work with text align + */ +.uk-heading-line > * { + display: inline-block; + position: relative; +} +/* + * 1. Center vertically + * 2. Make the element as large as possible. It's clipped by the container. + * 3. Style + */ +.uk-heading-line > ::before, +.uk-heading-line > ::after { + content: ""; + /* 1 */ + position: absolute; + top: calc(50% - (calc(0.2px + 0.05em) / 2)); + /* 2 */ + width: 2000px; + /* 3 */ + border-bottom: calc(0.2px + 0.05em) solid #e5e5e5; +} +.uk-heading-line > ::before { + left: 100%; + margin-left: calc(5px + 0.3em); +} +.uk-heading-line > ::after { + right: 100%; + margin-right: calc(5px + 0.3em); +} +/* ======================================================================== + Component: Divider + ========================================================================== */ +/* + * 1. Reset default `hr` + * 2. Set margin if a `div` is used for semantical reason + */ +[class*="uk-divider"] { + /* 1 */ + border: none; + /* 2 */ + margin-bottom: 20px; +} +/* Add margin if adjacent element */ +* + [class*="uk-divider"] { + margin-top: 20px; +} +/* Icon + ========================================================================== */ +.uk-divider-icon { + position: relative; + height: 20px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +.uk-divider-icon::before, +.uk-divider-icon::after { + content: ""; + position: absolute; + top: 50%; + max-width: calc(50% - (50px / 2)); + border-bottom: 1px solid #e5e5e5; +} +.uk-divider-icon::before { + left: calc(50% + (50px / 2)); + width: 100%; +} +.uk-divider-icon::after { + right: calc(50% + (50px / 2)); + width: 100%; +} +/* Small + ========================================================================== */ +/* + * 1. Fix height because of `inline-block` + * 2. Using ::after and inline-block to make `text-align` work + */ +/* 1 */ +.uk-divider-small { + line-height: 0; +} +/* 2 */ +.uk-divider-small::after { + content: ""; + display: inline-block; + width: 100px; + max-width: 100%; + border-top: 1px solid #e5e5e5; + vertical-align: top; +} +/* Vertical + ========================================================================== */ +.uk-divider-vertical { + width: max-content; + height: 100px; + margin-right: auto; + margin-left: auto; + border-right: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: List + ========================================================================== */ +.uk-list { + padding: 0; + list-style: none; +} +/* + * Avoid column break within the list item, when using `column-count` + */ +.uk-list > * { + break-inside: avoid-column; +} +/* + * Remove margin from the last-child + */ +.uk-list > * > :last-child { + margin-bottom: 0; +} +/* + * Style + */ +.uk-list > :nth-child(n+2), +.uk-list > * > ul { + margin-top: 10px; +} +/* Marker modifiers + ========================================================================== */ +.uk-list-disc, +.uk-list-circle, +.uk-list-square, +.uk-list-decimal, +.uk-list-hyphen { + padding-right: 30px; +} +.uk-list-disc { + list-style-type: disc; +} +.uk-list-circle { + list-style-type: circle; +} +.uk-list-square { + list-style-type: square; +} +.uk-list-decimal { + list-style-type: decimal; +} +.uk-list-hyphen { + list-style-type: '– '; +} +/* + * Color modifiers + */ +.uk-list-muted > ::marker { + color: #999 !important; +} +.uk-list-emphasis > ::marker { + color: #333 !important; +} +.uk-list-primary > ::marker { + color: #1e87f0 !important; +} +.uk-list-secondary > ::marker { + color: #222 !important; +} +/* Image bullet modifier + ========================================================================== */ +.uk-list-bullet > * { + position: relative; + padding-right: 30px; +} +.uk-list-bullet > ::before { + content: ""; + position: absolute; + top: 0; + right: 0; + width: 30px; + height: 1.5em; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +/* Style modifiers + ========================================================================== */ +/* + * Divider + */ +.uk-list-divider > :nth-child(n+2) { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid #e5e5e5; +} +/* + * Striped + */ +.uk-list-striped > * { + padding: 10px 10px; +} +.uk-list-striped > *:nth-of-type(odd) { + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +.uk-list-striped > :nth-of-type(odd) { + background: #f8f8f8; +} +.uk-list-striped > :nth-child(n+2) { + margin-top: 0; +} +/* Size modifier + ========================================================================== */ +.uk-list-large > :nth-child(n+2), +.uk-list-large > * > ul { + margin-top: 20px; +} +.uk-list-collapse > :nth-child(n+2), +.uk-list-collapse > * > ul { + margin-top: 0; +} +/* + * Divider + */ +.uk-list-large.uk-list-divider > :nth-child(n+2) { + margin-top: 20px; + padding-top: 20px; +} +.uk-list-collapse.uk-list-divider > :nth-child(n+2) { + margin-top: 0; + padding-top: 0; +} +/* + * Striped + */ +.uk-list-large.uk-list-striped > * { + padding: 20px 10px; +} +.uk-list-collapse.uk-list-striped > * { + padding-top: 0; + padding-bottom: 0; +} +.uk-list-large.uk-list-striped > :nth-child(n+2), +.uk-list-collapse.uk-list-striped > :nth-child(n+2) { + margin-top: 0; +} +/* ======================================================================== + Component: Description list + ========================================================================== */ +/* + * Term + */ +.uk-description-list > dt { + color: #333; + font-size: 0.875rem; + font-weight: normal; + text-transform: uppercase; +} +.uk-description-list > dt:nth-child(n+2) { + margin-top: 20px; +} +/* + * Description + */ +/* Style modifier + ========================================================================== */ +/* + * Line + */ +.uk-description-list-divider > dt:nth-child(n+2) { + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Table + ========================================================================== */ +/* + * 1. Remove most spacing between table cells. + * 2. Behave like a block element + * 3. Style + */ +.uk-table { + /* 1 */ + border-collapse: collapse; + border-spacing: 0; + /* 2 */ + width: 100%; + /* 3 */ + margin-bottom: 20px; +} +/* Add margin if adjacent element */ +* + .uk-table { + margin-top: 20px; +} +/* Header cell + ========================================================================== */ +/* + * 1. Style + */ +.uk-table th { + padding: 16px 12px; + text-align: right; + vertical-align: bottom; + /* 1 */ + font-size: 0.875rem; + font-weight: normal; + color: #999; + text-transform: uppercase; +} +/* Cell + ========================================================================== */ +.uk-table td { + padding: 16px 12px; + vertical-align: top; +} +/* + * Remove margin from the last-child + */ +.uk-table td > :last-child { + margin-bottom: 0; +} +/* Footer + ========================================================================== */ +.uk-table tfoot { + font-size: 0.875rem; +} +/* Caption + ========================================================================== */ +.uk-table caption { + font-size: 0.875rem; + text-align: right; + color: #999; +} +/* Alignment modifier + ========================================================================== */ +.uk-table-middle, +.uk-table-middle td { + vertical-align: middle !important; +} +/* Style modifiers + ========================================================================== */ +/* + * Divider + */ +.uk-table-divider > tr:not(:first-child), +.uk-table-divider > :not(:first-child) > tr, +.uk-table-divider > :first-child > tr:not(:first-child) { + border-top: 1px solid #e5e5e5; +} +/* + * Striped + */ +.uk-table-striped > tr:nth-of-type(odd), +.uk-table-striped tbody tr:nth-of-type(odd) { + background: #f8f8f8; + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +/* + * Hover + */ +.uk-table-hover > tr:hover, +.uk-table-hover tbody tr:hover { + background: #ffd; +} +/* Active state + ========================================================================== */ +.uk-table > tr.uk-active, +.uk-table tbody tr.uk-active { + background: #ffd; +} +/* Size modifier + ========================================================================== */ +.uk-table-small th, +.uk-table-small td { + padding: 10px 12px; +} +.uk-table-large th, +.uk-table-large td { + padding: 22px 12px; +} +/* Justify modifier + ========================================================================== */ +.uk-table-justify th:first-child, +.uk-table-justify td:first-child { + padding-right: 0; +} +.uk-table-justify th:last-child, +.uk-table-justify td:last-child { + padding-left: 0; +} +/* Cell size modifier + ========================================================================== */ +.uk-table-shrink { + width: 1px; +} +.uk-table-expand { + min-width: 150px; +} +/* Cell link modifier + ========================================================================== */ +/* + * Does not work with `uk-table-justify` at the moment + */ +.uk-table-link { + padding: 0 !important; +} +.uk-table-link > a { + display: block; + padding: 16px 12px; +} +.uk-table-small .uk-table-link > a { + padding: 10px 12px; +} +/* Responsive table + ========================================================================== */ +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-table-responsive, + .uk-table-responsive tbody, + .uk-table-responsive th, + .uk-table-responsive td, + .uk-table-responsive tr { + display: block; + } + .uk-table-responsive thead { + display: none; + } + .uk-table-responsive th, + .uk-table-responsive td { + width: auto !important; + max-width: none !important; + min-width: 0 !important; + overflow: visible !important; + white-space: normal !important; + } + .uk-table-responsive th:not(:first-child):not(.uk-table-link), + .uk-table-responsive td:not(:first-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:first-child) > a { + padding-top: 5px !important; + } + .uk-table-responsive th:not(:last-child):not(.uk-table-link), + .uk-table-responsive td:not(:last-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:last-child) > a { + padding-bottom: 5px !important; + } + .uk-table-justify.uk-table-responsive th, + .uk-table-justify.uk-table-responsive td { + padding-right: 0; + padding-left: 0; + } +} +.uk-table tbody tr { + transition: background-color 0.1s linear; +} +.uk-table-striped > tr:nth-of-type(even):last-child, +.uk-table-striped tbody tr:nth-of-type(even):last-child { + border-bottom: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Icon + ========================================================================== */ +/* + * Note: 1. - 7. is required for `button` elements. Needed for Close and Form Icon component. + * 1. Remove margins in Chrome, Safari and Opera. + * 2. Remove borders for `button`. + * 3. Remove border-radius in Chrome. + * 4. Address `overflow` set to `hidden` in IE. + * 5. Correct `font` properties and `color` not being inherited for `button`. + * 6. Remove the inheritance of text transform in Edge, Firefox, and IE. + * 7. Remove default `button` padding and background color + * 8. Style + * 9. Fill all SVG elements with the current text color if no `fill` attribute is set + * 10. Let the container fit the height of the icon + */ +.uk-icon { + /* 1 */ + margin: 0; + /* 2 */ + border: none; + /* 3 */ + border-radius: 0; + /* 4 */ + overflow: visible; + /* 5 */ + font: inherit; + color: inherit; + /* 6 */ + text-transform: none; + /* 7. */ + padding: 0; + background-color: transparent; + /* 8 */ + display: inline-block; + /* 9 */ + fill: currentcolor; + /* 10 */ + line-height: 0; +} +/* Required for `button`. */ +button.uk-icon:not(:disabled) { + cursor: pointer; +} +/* + * Remove the inner border and padding in Firefox. + */ +.uk-icon::-moz-focus-inner { + border: 0; + padding: 0; +} +/* + * Set the fill and stroke color of all SVG elements to the current text color + */ +.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve) { + fill: currentcolor; +} +.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve) { + stroke: currentcolor; +} +/* + * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835 + */ +.uk-icon > * { + transform: translate(0, 0); +} +/* Image modifier + ========================================================================== */ +/* + * Display images in icon dimensions + * 1. Required for `span` with background image + * 2. Required for `image` + */ +.uk-icon-image { + width: 20px; + height: 20px; + /* 1 */ + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: contain; + vertical-align: middle; + /* 2 */ + object-fit: scale-down; + max-width: none; +} +/* Style modifiers + ========================================================================== */ +/* + * Link + * 1. Allow text within link + */ +.uk-icon-link { + color: #999; + /* 1 */ + text-decoration: none !important; +} +.uk-icon-link:hover { + color: #666; +} +/* OnClick + Active */ +.uk-icon-link:active, +.uk-active > .uk-icon-link { + color: #595959; +} +/* + * Button + * 1. Center icon vertically and horizontally + */ +.uk-icon-button { + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 500px; + background: #f8f8f8; + color: #999; + vertical-align: middle; + /* 1 */ + display: inline-flex; + justify-content: center; + align-items: center; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-icon-button:hover { + background-color: #ebebeb; + color: #666; +} +/* OnClick + Active */ +.uk-icon-button:active, +.uk-active > .uk-icon-button { + background-color: #dfdfdf; + color: #666; +} +/* ======================================================================== + Component: Form Range + ========================================================================== */ +/* + * 1. Remove default style. + * 2. Define consistent box sizing. + * 3. Remove `margin` in all browsers. + * 4. Align to the center of the line box. + * 5. Prevent content overflow if a fixed width is used. + * 6. Take the full width. + * 7. Remove white background in Chrome. + */ +.uk-range { + /* 1 */ + -webkit-appearance: none; + /* 2 */ + box-sizing: border-box; + /* 3 */ + margin: 0; + /* 4 */ + vertical-align: middle; + /* 5 */ + max-width: 100%; + /* 6 */ + width: 100%; + /* 7 */ + background: transparent; +} +/* Focus */ +.uk-range:focus { + outline: none; +} +.uk-range::-moz-focus-outer { + border: none; +} +/* + * Improves consistency of cursor style for clickable elements + */ +.uk-range:not(:disabled)::-webkit-slider-thumb { + cursor: pointer; +} +.uk-range:not(:disabled)::-moz-range-thumb { + cursor: pointer; +} +/* + * Track + * 1. Safari doesn't have a focus state. Using active instead. + */ +/* Webkit */ +.uk-range::-webkit-slider-runnable-track { + height: 3px; + background: #ebebeb; + border-radius: 500px; +} +.uk-range:focus::-webkit-slider-runnable-track, +.uk-range:active::-webkit-slider-runnable-track { + background: #dedede; +} +/* Firefox */ +.uk-range::-moz-range-track { + height: 3px; + background: #ebebeb; + border-radius: 500px; +} +.uk-range:focus::-moz-range-track { + background: #dedede; +} +/* + * Thumb + * 1. Reset + * 2. Style + */ +/* Webkit */ +.uk-range::-webkit-slider-thumb { + /* 1 */ + -webkit-appearance: none; + margin-top: -7px; + /* 2 */ + height: 15px; + width: 15px; + border-radius: 500px; + background: #fff; + border: 1px solid #cccccc; +} +/* Firefox */ +.uk-range::-moz-range-thumb { + /* 1 */ + border: none; + /* 2 */ + height: 15px; + width: 15px; + margin-top: -7px; + border-radius: 500px; + background: #fff; + border: 1px solid #cccccc; +} +/* ======================================================================== + Component: Form + ========================================================================== */ +/* + * 1. Define consistent box sizing. + * Default is `content-box` with following exceptions set to `border-box` + * `select`, `input[type="checkbox"]` and `input[type="radio"]` + * `input[type="search"]` in Chrome, Safari and Opera + * `input[type="color"]` in Firefox + * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera. + * 3. Remove `border-radius` in iOS. + * 4. Change font properties to `inherit` in all browsers. + */ +.uk-input, +.uk-select, +.uk-textarea, +.uk-radio, +.uk-checkbox { + /* 1 */ + box-sizing: border-box; + /* 2 */ + margin: 0; + /* 3 */ + border-radius: 0; + /* 4 */ + font: inherit; +} +/* + * Show the overflow in Edge. + */ +.uk-input { + overflow: visible; +} +/* + * Remove the inheritance of text transform in Firefox. + */ +.uk-select { + text-transform: none; +} +/* + * 1. Change font properties to `inherit` in all browsers + * 2. Don't inherit the `font-weight` and use `bold` instead. + * NOTE: Both declarations don't work in Chrome, Safari and Opera. + */ +.uk-select optgroup { + /* 1 */ + font: inherit; + /* 2 */ + font-weight: bold; +} +/* + * Remove the default vertical scrollbar in IE 10+. + */ +.uk-textarea { + overflow: auto; +} +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X. + */ +.uk-input[type="search"]::-webkit-search-cancel-button, +.uk-input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/* + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +.uk-input[type="number"]::-webkit-inner-spin-button, +.uk-input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/* + * Correct vertical alignment in Safari. + */ +.uk-input[type="date"]::-webkit-datetime-edit, +.uk-input[type="time"]::-webkit-datetime-edit, +.uk-input[type="datetime-local"]::-webkit-datetime-edit { + display: inline-flex; + align-items: center; + height: 100%; + padding: 0; +} +/* + * Removes placeholder transparency in Firefox. + */ +.uk-input::-moz-placeholder, +.uk-textarea::-moz-placeholder { + opacity: 1; +} +/* + * Improves consistency of cursor style for clickable elements + */ +.uk-radio:not(:disabled), +.uk-checkbox:not(:disabled) { + cursor: pointer; +} +/* + * Define consistent border, margin, and padding. + * 1. Reset `min-width` + */ +.uk-fieldset { + border: none; + margin: 0; + padding: 0; + /* 1 */ + min-width: 0; +} +/* Input, select and textarea + * Allowed: `text`, `password`, `datetime-local`, `date`, `month`, + `time`, `week`, `number`, `email`, `url`, `search`, `tel`, `color` + * Disallowed: `range`, `radio`, `checkbox`, `file`, `submit`, `reset` and `image` + ========================================================================== */ +/* + * Remove default style in iOS. + */ +.uk-input, +.uk-textarea { + -webkit-appearance: none; +} +/* + * 1. Prevent content overflow if a fixed width is used + * 2. Take the full width + * 3. Reset default + * 4. Style + */ +.uk-input, +.uk-select, +.uk-textarea { + /* 1 */ + max-width: 100%; + /* 2 */ + width: 100%; + /* 3 */ + border: 0 none; + /* 4 */ + padding: 0 10px; + background: #fff; + color: #666; + border: 1px solid #e5e5e5; + transition: 0.2s ease-in-out; + transition-property: color, background-color, border; +} +/* + * Single-line + * 1. Allow any element to look like an `input` or `select` element + * 2. Make sure line-height is not larger than height + * Also needed to center the text vertically + */ +.uk-input, +.uk-select:not([multiple]):not([size]) { + height: 40px; + vertical-align: middle; + /* 1 */ + display: inline-block; +} +/* 2 */ +.uk-input:not(input), +.uk-select:not(select) { + line-height: 38px; +} +/* + * Multi-line + */ +.uk-select[multiple], +.uk-select[size], +.uk-textarea { + padding-top: 6px; + padding-bottom: 6px; + vertical-align: top; +} +.uk-select[multiple], +.uk-select[size] { + resize: vertical; +} +/* Focus */ +.uk-input:focus, +.uk-select:focus, +.uk-textarea:focus { + outline: none; + background-color: #fff; + color: #666; + border-color: #1e87f0; +} +/* Disabled */ +.uk-input:disabled, +.uk-select:disabled, +.uk-textarea:disabled { + background-color: #f8f8f8; + color: #999; + border-color: #e5e5e5; +} +/* + * Placeholder + */ +.uk-input::placeholder { + color: #999; +} +.uk-textarea::placeholder { + color: #999; +} +/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Small + */ +.uk-form-small { + font-size: 0.875rem; +} +/* Single-line */ +.uk-form-small:not(textarea):not([multiple]):not([size]) { + height: 30px; + padding-right: 8px; + padding-left: 8px; +} +/* Multi-line */ +textarea.uk-form-small, +[multiple].uk-form-small, +[size].uk-form-small { + padding: 5px 8px; +} +.uk-form-small:not(select):not(input):not(textarea) { + line-height: 28px; +} +/* + * Large + */ +.uk-form-large { + font-size: 1.25rem; +} +/* Single-line */ +.uk-form-large:not(textarea):not([multiple]):not([size]) { + height: 55px; + padding-right: 12px; + padding-left: 12px; +} +/* Multi-line */ +textarea.uk-form-large, +[multiple].uk-form-large, +[size].uk-form-large { + padding: 7px 12px; +} +.uk-form-large:not(select):not(input):not(textarea) { + line-height: 53px; +} +/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Error + */ +.uk-form-danger, +.uk-form-danger:focus { + color: #f0506e; + border-color: #f0506e; +} +/* + * Success + */ +.uk-form-success, +.uk-form-success:focus { + color: #32d296; + border-color: #32d296; +} +/* + * Blank + */ +.uk-form-blank { + background: none; + border-color: transparent; +} +.uk-form-blank:focus { + border-color: #e5e5e5; + border-style: solid; +} +/* Width modifiers (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Fixed widths + * Different widths for mini sized `input` and `select` elements + */ +input.uk-form-width-xsmall { + width: 50px; +} +select.uk-form-width-xsmall { + width: 75px; +} +.uk-form-width-small { + width: 130px; +} +.uk-form-width-medium { + width: 200px; +} +.uk-form-width-large { + width: 500px; +} +/* Select + ========================================================================== */ +/* + * 1. Remove default style. Also works in Firefox + * 2. Style + * 3. Set `color` for options in the select dropdown, because the inherited `color` might be too light. + */ +.uk-select:not([multiple]):not([size]) { + /* 1 */ + -webkit-appearance: none; + -moz-appearance: none; + /* 2 */ + padding-left: 20px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); + background-repeat: no-repeat; + background-position: 0% 50%; +} +/* 3 */ +.uk-select:not([multiple]):not([size]) option { + color: #666; +} +/* + * Disabled + */ +.uk-select:not([multiple]):not([size]):disabled { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +/* Datalist + ========================================================================== */ +/* + * 1. Remove default style in Chrome + */ +.uk-input[list] { + padding-left: 20px; + background-repeat: no-repeat; + background-position: 0% 50%; +} +.uk-input[list]:hover, +.uk-input[list]:focus { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +/* 1 */ +.uk-input[list]::-webkit-calendar-picker-indicator { + display: none !important; +} +/* Radio and checkbox + ========================================================================== */ +/* + * 1. Style + * 2. Make box more robust so it clips the child element + * 3. Vertical alignment + * 4. Remove default style + * 5. Fix black background on iOS + * 6. Center icons + */ +.uk-radio, +.uk-checkbox { + /* 1 */ + display: inline-block; + height: 16px; + width: 16px; + /* 2 */ + overflow: hidden; + /* 3 */ + margin-top: -4px; + vertical-align: middle; + /* 4 */ + -webkit-appearance: none; + -moz-appearance: none; + /* 5 */ + background-color: transparent; + /* 6 */ + background-repeat: no-repeat; + background-position: 50% 50%; + border: 1px solid #cccccc; + transition: 0.2s ease-in-out; + transition-property: background-color, border; +} +.uk-radio { + border-radius: 50%; +} +/* Focus */ +.uk-radio:focus, +.uk-checkbox:focus { + background-color: rgba(0, 0, 0, 0); + outline: none; + border-color: #1e87f0; +} +/* + * Checked + */ +.uk-radio:checked, +.uk-checkbox:checked, +.uk-checkbox:indeterminate { + background-color: #1e87f0; + border-color: transparent; +} +/* Focus */ +.uk-radio:checked:focus, +.uk-checkbox:checked:focus, +.uk-checkbox:indeterminate:focus { + background-color: #0e6dcd; +} +/* + * Icons + */ +.uk-radio:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-checkbox:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-checkbox:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* + * Disabled + */ +.uk-radio:disabled, +.uk-checkbox:disabled { + background-color: #f8f8f8; + border-color: #e5e5e5; +} +.uk-radio:disabled:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-checkbox:disabled:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-checkbox:disabled:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* Legend + ========================================================================== */ +/* + * Legend + * 1. Behave like block element + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove padding so people aren't caught out if they zero out fieldsets. + * 4. Style + */ +.uk-legend { + /* 1 */ + width: 100%; + /* 2 */ + color: inherit; + /* 3 */ + padding: 0; + /* 4 */ + font-size: 1.5rem; + line-height: 1.4; +} +/* Custom controls + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Behave like most inline-block elements + */ +.uk-form-custom { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + vertical-align: middle; +} +/* + * 1. Position and resize the form control to always cover its container + * 2. Required for Firefox for positioning to the left + * 3. Required for Webkit to make `height` work + * 4. Hide controls and show cursor + * 5. Needed for the cursor + * 6. Clip height caused by 5. Needed for Webkit only + */ +.uk-form-custom select, +.uk-form-custom input[type="file"] { + /* 1 */ + position: absolute; + top: 0; + z-index: 1; + width: 100%; + height: 100%; + /* 2 */ + right: 0; + /* 3 */ + -webkit-appearance: none; + /* 4 */ + opacity: 0; + cursor: pointer; +} +.uk-form-custom input[type="file"] { + /* 5 */ + font-size: 500px; + /* 6 */ + overflow: hidden; +} +/* Label + ========================================================================== */ +.uk-form-label { + color: #333; + font-size: 0.875rem; +} +/* Layout + ========================================================================== */ +/* + * Stacked + */ +.uk-form-stacked .uk-form-label { + display: block; + margin-bottom: 5px; +} +/* + * Horizontal + */ +/* Tablet portrait and smaller */ +@media (max-width: 959px) { + /* Behave like `uk-form-stacked` */ + .uk-form-horizontal .uk-form-label { + display: block; + margin-bottom: 5px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-form-horizontal .uk-form-label { + width: 200px; + margin-top: 7px; + float: right; + } + .uk-form-horizontal .uk-form-controls { + margin-right: 215px; + } + /* Better vertical alignment if controls are checkboxes and radio buttons with text */ + .uk-form-horizontal .uk-form-controls-text { + padding-top: 7px; + } +} +/* Icons + ========================================================================== */ +/* + * 1. Set position + * 2. Set width + * 3. Center icon vertically and horizontally + * 4. Style + */ +.uk-form-icon { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + right: 0; + /* 2 */ + width: 40px; + /* 3 */ + display: inline-flex; + justify-content: center; + align-items: center; + /* 4 */ + color: #999; +} +/* + * Required for `a`. + */ +.uk-form-icon:hover { + color: #666; +} +/* + * Make `input` element clickable through icon, e.g. if it's a `span` + */ +.uk-form-icon:not(a):not(button):not(input) { + pointer-events: none; +} +/* + * Input padding + */ +.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input { + padding-right: 40px !important; +} +/* + * Position modifier + */ +.uk-form-icon-flip { + left: 0; + right: auto; +} +.uk-form-icon-flip ~ .uk-input { + padding-left: 40px !important; +} +/* ======================================================================== + Component: Button + ========================================================================== */ +/* + * 1. Remove margins in Chrome, Safari and Opera. + * 2. Remove borders for `button`. + * 3. Address `overflow` set to `hidden` in IE. + * 4. Correct `font` properties and `color` not being inherited for `button`. + * 5. Remove the inheritance of text transform in Edge, Firefox, and IE. + * 6. Remove default style for `input type="submit"`in iOS. + * 7. Style + * 8. `line-height` is used to create a height because it also centers the text vertically for `a` elements. + * Better would be to use height and flexbox to center the text vertically but flexbox doesn't work in Firefox on `button` elements. + * 9. Align text if button has a width + * 10. Required for `a`. + */ +.uk-button { + /* 1 */ + margin: 0; + /* 2 */ + border: none; + /* 3 */ + overflow: visible; + /* 4 */ + font: inherit; + color: inherit; + /* 5 */ + text-transform: none; + /* 6 */ + -webkit-appearance: none; + border-radius: 0; + /* 7 */ + display: inline-block; + box-sizing: border-box; + padding: 0 30px; + vertical-align: middle; + font-size: 0.875rem; + /* 8 */ + line-height: 38px; + /* 9 */ + text-align: center; + /* 10 */ + text-decoration: none; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color, border-color; +} +.uk-button:not(:disabled) { + cursor: pointer; +} +/* + * Remove the inner border and padding in Firefox. + */ +.uk-button::-moz-focus-inner { + border: 0; + padding: 0; +} +/* Hover */ +.uk-button:hover { + /* 9 */ + text-decoration: none; +} +/* OnClick + Active */ +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-button-default { + background-color: transparent; + color: #333; + border: 1px solid #e5e5e5; +} +/* Hover */ +.uk-button-default:hover { + background-color: transparent; + color: #333; + border-color: #b2b2b2; +} +/* OnClick + Active */ +.uk-button-default:active, +.uk-button-default.uk-active { + background-color: transparent; + color: #333; + border-color: #999999; +} +/* + * Primary + */ +.uk-button-primary { + background-color: #1e87f0; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-primary:hover { + background-color: #0f7ae5; + color: #fff; +} +/* OnClick + Active */ +.uk-button-primary:active, +.uk-button-primary.uk-active { + background-color: #0e6dcd; + color: #fff; +} +/* + * Secondary + */ +.uk-button-secondary { + background-color: #222; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-secondary:hover { + background-color: #151515; + color: #fff; +} +/* OnClick + Active */ +.uk-button-secondary:active, +.uk-button-secondary.uk-active { + background-color: #080808; + color: #fff; +} +/* + * Danger + */ +.uk-button-danger { + background-color: #f0506e; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-danger:hover { + background-color: #ee395b; + color: #fff; +} +/* OnClick + Active */ +.uk-button-danger:active, +.uk-button-danger.uk-active { + background-color: #ec2147; + color: #fff; +} +/* + * Disabled + * The same for all style modifiers + */ +.uk-button-default:disabled, +.uk-button-primary:disabled, +.uk-button-secondary:disabled, +.uk-button-danger:disabled { + background-color: transparent; + color: #999; + border-color: #e5e5e5; +} +/* Size modifiers + ========================================================================== */ +.uk-button-small { + padding: 0 15px; + line-height: 28px; + font-size: 0.875rem; +} +.uk-button-large { + padding: 0 40px; + line-height: 53px; + font-size: 0.875rem; +} +/* Text modifiers + ========================================================================== */ +/* + * Text + * 1. Reset + * 2. Style + */ +.uk-button-text { + /* 1 */ + padding: 0; + line-height: 1.5; + background: none; + /* 2 */ + color: #333; + position: relative; +} +.uk-button-text::before { + content: ""; + position: absolute; + bottom: 0; + right: 0; + left: 100%; + border-bottom: 1px solid currentColor; + transition: left 0.3s ease-out; +} +/* Hover */ +.uk-button-text:hover { + color: #333; +} +.uk-button-text:hover::before { + left: 0; +} +/* Disabled */ +.uk-button-text:disabled { + color: #999; +} +.uk-button-text:disabled::before { + display: none; +} +/* + * Link + * 1. Reset + * 2. Style + */ +.uk-button-link { + /* 1 */ + padding: 0; + line-height: 1.5; + background: none; + /* 2 */ + color: #333; +} +/* Hover */ +.uk-button-link:hover { + color: #999; + text-decoration: none; +} +/* Disabled */ +.uk-button-link:disabled { + color: #999; + text-decoration: none; +} +/* Group + ========================================================================== */ +/* + * 1. Using `flex` instead of `inline-block` to prevent whitespace between child elements + * 2. Behave like button + * 3. Create position context + */ +.uk-button-group { + /* 1 */ + display: inline-flex; + /* 2 */ + vertical-align: middle; + /* 3 */ + position: relative; +} +/* Group + ========================================================================== */ +/* + * Collapse border + */ +.uk-button-group > .uk-button:nth-child(n+2), +.uk-button-group > div:nth-child(n+2) .uk-button { + margin-right: -1px; +} +/* + * Create position context to superimpose the successor elements border + * Known issue: If you use an `a` element as button and an icon inside, + * the active state will not work if you click the icon inside the button + * Workaround: Just use a `button` or `input` element as button + */ +.uk-button-group .uk-button:hover, +.uk-button-group .uk-button:focus, +.uk-button-group .uk-button:active, +.uk-button-group .uk-button.uk-active { + position: relative; + z-index: 1; +} +/* ======================================================================== + Component: Progress + ========================================================================== */ +/* + * 1. Add the correct vertical alignment in all browsers. + * 2. Behave like a block element. + * 3. Remove borders in Firefox. + * 4. Remove default style in Chrome, Safari and Edge. + * 5. Style + */ +.uk-progress { + /* 1 */ + vertical-align: baseline; + /* 2 */ + display: block; + width: 100%; + /* 3 */ + border: 0; + /* 4 */ + background-color: #f8f8f8; + /* 5 */ + margin-bottom: 20px; + height: 15px; + border-radius: 500px; + overflow: hidden; +} +/* Add margin if adjacent element */ +* + .uk-progress { + margin-top: 20px; +} +/* + * Show background color set on `uk-progress` in Chrome, Safari and Edge. + */ +.uk-progress::-webkit-progress-bar { + background-color: transparent; +} +/* + * Progress Bar + * 1. Transitions don't work on `::-moz-progress-bar` pseudo element in Firefox yet. + * https://bugzilla.mozilla.org/show_bug.cgi?id=662351 + */ +.uk-progress::-webkit-progress-value { + background-color: #1e87f0; + transition: width 0.6s ease; +} +.uk-progress::-moz-progress-bar { + background-color: #1e87f0; + /* 1 */ + transition: width 0.6s ease; +} +/* ======================================================================== + Component: Section + ========================================================================== */ +/* + * 1. Make it work with `100vh` and height in general + */ +.uk-section { + display: flow-root; + box-sizing: border-box; + /* 1 */ + padding-top: 40px; + padding-bottom: 40px; +} +/* Desktop and bigger */ +@media (min-width: 960px) { + .uk-section { + padding-top: 70px; + padding-bottom: 70px; + } +} +/* + * Remove margin from the last-child + */ +.uk-section > :last-child { + margin-bottom: 0; +} +/* Size modifiers + ========================================================================== */ +/* + * XSmall + */ +.uk-section-xsmall { + padding-top: 20px; + padding-bottom: 20px; +} +/* + * Small + */ +.uk-section-small { + padding-top: 40px; + padding-bottom: 40px; +} +/* + * Large + */ +.uk-section-large { + padding-top: 70px; + padding-bottom: 70px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-section-large { + padding-top: 140px; + padding-bottom: 140px; + } +} +/* + * XLarge + */ +.uk-section-xlarge { + padding-top: 140px; + padding-bottom: 140px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-section-xlarge { + padding-top: 210px; + padding-bottom: 210px; + } +} +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-section-default { + --uk-inverse: dark; + background: #fff; +} +/* + * Muted + */ +.uk-section-muted { + --uk-inverse: dark; + background: #f8f8f8; +} +/* + * Primary + */ +.uk-section-primary { + --uk-inverse: light; + background: #1e87f0; +} +/* + * Secondary + */ +.uk-section-secondary { + --uk-inverse: light; + background: #222; +} +/* Overlap modifier + ========================================================================== */ +/* + * Reserved modifier to make a section overlap another section with an border image + * Implemented by the theme + */ +/* ======================================================================== + Component: Container + ========================================================================== */ +/* + * 1. Box sizing has to be `content-box` so the max-width is always the same and + * unaffected by the padding on different breakpoints. It's important for the size modifiers. + */ +.uk-container { + display: flow-root; + /* 1 */ + box-sizing: content-box; + max-width: 1200px; + margin-right: auto; + margin-left: auto; + padding-right: 15px; + padding-left: 15px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container { + padding-right: 30px; + padding-left: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container { + padding-right: 40px; + padding-left: 40px; + } +} +/* + * Remove margin from the last-child + */ +.uk-container > :last-child { + margin-bottom: 0; +} +/* + * Remove padding from nested containers + */ +.uk-container .uk-container { + padding-right: 0; + padding-left: 0; +} +/* Size modifier + ========================================================================== */ +.uk-container-xsmall { + max-width: 750px; +} +.uk-container-small { + max-width: 900px; +} +.uk-container-large { + max-width: 1400px; +} +.uk-container-xlarge { + max-width: 1600px; +} +.uk-container-expand { + max-width: none; +} +/* Expand modifier + ========================================================================== */ +/* + * Expand one side only + */ +.uk-container-expand-right { + margin-right: 0; +} +.uk-container-expand-left { + margin-left: 0; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container-expand-right.uk-container-xsmall, + .uk-container-expand-left.uk-container-xsmall { + max-width: calc(50% + (750px / 2) - 30px); + } + .uk-container-expand-right.uk-container-small, + .uk-container-expand-left.uk-container-small { + max-width: calc(50% + (900px / 2) - 30px); + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container-expand-right, + .uk-container-expand-left { + max-width: calc(50% + (1200px / 2) - 40px); + } + .uk-container-expand-right.uk-container-xsmall, + .uk-container-expand-left.uk-container-xsmall { + max-width: calc(50% + (750px / 2) - 40px); + } + .uk-container-expand-right.uk-container-small, + .uk-container-expand-left.uk-container-small { + max-width: calc(50% + (900px / 2) - 40px); + } + .uk-container-expand-right.uk-container-large, + .uk-container-expand-left.uk-container-large { + max-width: calc(50% + (1400px / 2) - 40px); + } + .uk-container-expand-right.uk-container-xlarge, + .uk-container-expand-left.uk-container-xlarge { + max-width: calc(50% + (1600px / 2) - 40px); + } +} +/* Item + ========================================================================== */ +/* + * Utility classes to reset container padding on the left or right side + * Note: It has to be negative margin on the item, because it's specific to the item. + */ +.uk-container-item-padding-remove-right, +.uk-container-item-padding-remove-left { + width: calc(100% + 15px); +} +.uk-container-item-padding-remove-right { + margin-right: -15px; +} +.uk-container-item-padding-remove-left { + margin-left: -15px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container-item-padding-remove-right, + .uk-container-item-padding-remove-left { + width: calc(100% + 30px); + } + .uk-container-item-padding-remove-right { + margin-right: -30px; + } + .uk-container-item-padding-remove-left { + margin-left: -30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container-item-padding-remove-right, + .uk-container-item-padding-remove-left { + width: calc(100% + 40px); + } + .uk-container-item-padding-remove-right { + margin-right: -40px; + } + .uk-container-item-padding-remove-left { + margin-left: -40px; + } +} +/* ======================================================================== + Component: Tile + ========================================================================== */ +.uk-tile { + display: flow-root; + position: relative; + box-sizing: border-box; + padding-right: 15px; + padding-left: 15px; + padding-top: 40px; + padding-bottom: 40px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-tile { + padding-right: 30px; + padding-left: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile { + padding-right: 40px; + padding-left: 40px; + padding-top: 70px; + padding-bottom: 70px; + } +} +/* + * Remove margin from the last-child + */ +.uk-tile > :last-child { + margin-bottom: 0; +} +/* Size modifiers + ========================================================================== */ +/* + * XSmall + */ +.uk-tile-xsmall { + padding-top: 20px; + padding-bottom: 20px; +} +/* + * Small + */ +.uk-tile-small { + padding-top: 40px; + padding-bottom: 40px; +} +/* + * Large + */ +.uk-tile-large { + padding-top: 70px; + padding-bottom: 70px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile-large { + padding-top: 140px; + padding-bottom: 140px; + } +} +/* + * XLarge + */ +.uk-tile-xlarge { + padding-top: 140px; + padding-bottom: 140px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile-xlarge { + padding-top: 210px; + padding-bottom: 210px; + } +} +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-tile-default { + --uk-inverse: dark; + background-color: #fff; +} +/* + * Muted + */ +.uk-tile-muted { + --uk-inverse: dark; + background-color: #f8f8f8; +} +/* + * Primary + */ +.uk-tile-primary { + --uk-inverse: light; + background-color: #1e87f0; +} +/* + * Secondary + */ +.uk-tile-secondary { + --uk-inverse: light; + background-color: #222; +} +/* ======================================================================== + Component: Card + ========================================================================== */ +.uk-card { + position: relative; + box-sizing: border-box; + transition: box-shadow 0.1s ease-in-out; +} +/* Sections + ========================================================================== */ +.uk-card-body { + display: flow-root; + padding: 30px 30px; +} +.uk-card-header { + display: flow-root; + padding: 15px 30px; +} +.uk-card-footer { + display: flow-root; + padding: 15px 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-body { + padding: 40px 40px; + } + .uk-card-header { + padding: 20px 40px; + } + .uk-card-footer { + padding: 20px 40px; + } +} +/* + * Remove margin from the last-child + */ +.uk-card-body > :last-child, +.uk-card-header > :last-child, +.uk-card-footer > :last-child { + margin-bottom: 0; +} +/* Media + ========================================================================== */ +/* + * Reserved alignment modifier to style the media element, e.g. with `border-radius` + * Implemented by the theme + */ +/* Title + ========================================================================== */ +.uk-card-title { + font-size: 1.5rem; + line-height: 1.4; +} +/* Badge + ========================================================================== */ +/* + * 1. Position + * 2. Size + * 3. Style + * 4. Center child vertically + */ +.uk-card-badge { + /* 1 */ + position: absolute; + top: 15px; + left: 15px; + z-index: 1; + /* 2 */ + height: 22px; + padding: 0 10px; + /* 3 */ + background: #1e87f0; + color: #fff; + font-size: 0.875rem; + /* 4 */ + display: flex; + justify-content: center; + align-items: center; + line-height: 0; + border-radius: 2px; + text-transform: uppercase; +} +/* + * Remove margin from adjacent element + */ +.uk-card-badge:first-child + * { + margin-top: 0; +} +/* Hover modifier + ========================================================================== */ +.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover { + background-color: #fff; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* Style modifiers + ========================================================================== */ +/* + * Default + * Note: Header and Footer are only implemented for the default style + */ +.uk-card-default { + --uk-inverse: dark; + background-color: #fff; + color: #666; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-default .uk-card-title { + color: #333; +} +.uk-card-default.uk-card-hover:hover { + background-color: #fff; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-card-default .uk-card-header { + border-bottom: 1px solid #e5e5e5; +} +.uk-card-default .uk-card-footer { + border-top: 1px solid #e5e5e5; +} +/* + * Primary + */ +.uk-card-primary { + --uk-inverse: light; + background-color: #1e87f0; + color: #fff; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-primary .uk-card-title { + color: #fff; +} +.uk-card-primary.uk-card-hover:hover { + background-color: #1e87f0; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* + * Secondary + */ +.uk-card-secondary { + --uk-inverse: light; + background-color: #222; + color: #fff; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-secondary .uk-card-title { + color: #fff; +} +.uk-card-secondary.uk-card-hover:hover { + background-color: #222; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* Size modifier + ========================================================================== */ +/* + * Small + */ +.uk-card-small.uk-card-body, +.uk-card-small .uk-card-body { + padding: 20px 20px; +} +.uk-card-small .uk-card-header { + padding: 13px 20px; +} +.uk-card-small .uk-card-footer { + padding: 13px 20px; +} +/* + * Large + */ +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-large.uk-card-body, + .uk-card-large .uk-card-body { + padding: 70px 70px; + } + .uk-card-large .uk-card-header { + padding: 35px 70px; + } + .uk-card-large .uk-card-footer { + padding: 35px 70px; + } +} +/* + * Default + */ +.uk-card-body > .uk-nav-default { + margin-right: -30px; + margin-left: -30px; +} +.uk-card-body > .uk-nav-default:only-child { + margin-top: -15px; + margin-bottom: -15px; +} +.uk-card-body > .uk-nav-default > li > a, +.uk-card-body > .uk-nav-default .uk-nav-header, +.uk-card-body > .uk-nav-default .uk-nav-divider { + padding-right: 30px; + padding-left: 30px; +} +.uk-card-body > .uk-nav-default .uk-nav-sub { + padding-right: 45px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-body > .uk-nav-default { + margin-right: -40px; + margin-left: -40px; + } + .uk-card-body > .uk-nav-default:only-child { + margin-top: -25px; + margin-bottom: -25px; + } + .uk-card-body > .uk-nav-default > li > a, + .uk-card-body > .uk-nav-default .uk-nav-header, + .uk-card-body > .uk-nav-default .uk-nav-divider { + padding-right: 40px; + padding-left: 40px; + } + .uk-card-body > .uk-nav-default .uk-nav-sub { + padding-right: 55px; + } +} +/* + * Small + */ +.uk-card-small > .uk-nav-default { + margin-right: -20px; + margin-left: -20px; +} +.uk-card-small > .uk-nav-default:only-child { + margin-top: -5px; + margin-bottom: -5px; +} +.uk-card-small > .uk-nav-default > li > a, +.uk-card-small > .uk-nav-default .uk-nav-header, +.uk-card-small > .uk-nav-default .uk-nav-divider { + padding-right: 20px; + padding-left: 20px; +} +.uk-card-small > .uk-nav-default .uk-nav-sub { + padding-right: 35px; +} +/* + * Large + */ +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-large > .uk-nav-default { + margin: 0; + } + .uk-card-large > .uk-nav-default:only-child { + margin: 0; + } + .uk-card-large > .uk-nav-default > li > a, + .uk-card-large > .uk-nav-default .uk-nav-header, + .uk-card-large > .uk-nav-default .uk-nav-divider { + padding-right: 0; + padding-left: 0; + } + .uk-card-large > .uk-nav-default .uk-nav-sub { + padding-right: 15px; + } +} +/* ======================================================================== + Component: Close + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-close { + color: #999; + transition: 0.1s ease-in-out; + transition-property: color, opacity; +} +/* Hover */ +.uk-close:hover { + color: #666; +} +/* ======================================================================== + Component: Spinner + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +/* SVG + ========================================================================== */ +.uk-spinner > * { + animation: uk-spinner-rotate 1.4s linear infinite; +} +@keyframes uk-spinner-rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(-270deg); + } +} +/* + * Circle + */ +.uk-spinner > * > * { + stroke-dasharray: 88px; + stroke-dashoffset: 0; + transform-origin: center; + animation: uk-spinner-dash 1.4s ease-in-out infinite; + stroke-width: 1; + stroke-linecap: round; +} +@keyframes uk-spinner-dash { + 0% { + stroke-dashoffset: -88px; + } + 50% { + stroke-dashoffset: -22px; + transform: rotate(-135deg); + } + 100% { + stroke-dashoffset: -88px; + transform: rotate(-450deg); + } +} +/* ======================================================================== + Component: Totop + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-totop { + padding: 5px; + color: #999; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-totop:hover { + color: #666; +} +/* OnClick */ +.uk-totop:active { + color: #333; +} +/* ======================================================================== + Component: Marker + ========================================================================== */ +/* + * Addopts `uk-icon` + */ +.uk-marker { + padding: 5px; + background: #222; + color: #fff; + border-radius: 500px; +} +/* Hover */ +.uk-marker:hover { + color: #fff; +} +/* ======================================================================== + Component: Alert + ========================================================================== */ +.uk-alert { + position: relative; + margin-bottom: 20px; + padding: 15px 15px 15px 29px; + background: #f8f8f8; + color: #666; +} +/* Add margin if adjacent element */ +* + .uk-alert { + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-alert > :last-child { + margin-bottom: 0; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-alert-close { + position: absolute; + top: 20px; + left: 15px; + color: inherit; + opacity: 0.4; +} +/* + * Remove margin from adjacent element + */ +.uk-alert-close:first-child + * { + margin-top: 0; +} +/* + * Hover + */ +.uk-alert-close:hover { + color: inherit; + opacity: 0.8; +} +/* Style modifiers + ========================================================================== */ +/* + * Primary + */ +.uk-alert-primary { + background: #d8eafc; + color: #1e87f0; +} +/* + * Success + */ +.uk-alert-success { + background: #edfbf6; + color: #32d296; +} +/* + * Warning + */ +.uk-alert-warning { + background: #fff6ee; + color: #faa05a; +} +/* + * Danger + */ +.uk-alert-danger { + background: #fef4f6; + color: #f0506e; +} +/* + * Content + */ +.uk-alert h1, +.uk-alert h2, +.uk-alert h3, +.uk-alert h4, +.uk-alert h5, +.uk-alert h6 { + color: inherit; +} +.uk-alert a:not([class]) { + color: inherit; + text-decoration: underline; +} +.uk-alert a:not([class]):hover { + color: inherit; + text-decoration: underline; +} +/* ======================================================================== + Component: Placeholder + ========================================================================== */ +.uk-placeholder { + margin-bottom: 20px; + padding: 30px 30px; + background: transparent; + border: 1px dashed #e5e5e5; +} +/* Add margin if adjacent element */ +* + .uk-placeholder { + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-placeholder > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Badge + ========================================================================== */ +/* + * 1. Style + * 2. Center child vertically and horizontally + */ +.uk-badge { + box-sizing: border-box; + min-width: 18px; + height: 18px; + padding: 0 5px; + border-radius: 500px; + vertical-align: middle; + /* 1 */ + background: #1e87f0; + color: #fff !important; + font-size: 11px; + /* 2 */ + display: inline-flex; + justify-content: center; + align-items: center; + line-height: 0; +} +/* + * Required for `a` + */ +.uk-badge:hover { + text-decoration: none; +} +/* ======================================================================== + Component: Label + ========================================================================== */ +.uk-label { + display: inline-block; + padding: 0 10px; + background: #1e87f0; + line-height: 1.5; + font-size: 0.875rem; + color: #fff; + vertical-align: middle; + white-space: nowrap; + border-radius: 2px; + text-transform: uppercase; +} +/* Color modifiers + ========================================================================== */ +/* + * Success + */ +.uk-label-success { + background-color: #32d296; + color: #fff; +} +/* + * Warning + */ +.uk-label-warning { + background-color: #faa05a; + color: #fff; +} +/* + * Danger + */ +.uk-label-danger { + background-color: #f0506e; + color: #fff; +} +/* ======================================================================== + Component: Overlay + ========================================================================== */ +.uk-overlay { + padding: 30px 30px; +} +/* + * Remove margin from the last-child + */ +.uk-overlay > :last-child { + margin-bottom: 0; +} +/* Icon + ========================================================================== */ +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-overlay-default { + --uk-inverse: dark; + background: rgba(255, 255, 255, 0.8); +} +/* + * Primary + */ +.uk-overlay-primary { + --uk-inverse: light; + background: rgba(34, 34, 34, 0.8); +} +/* ======================================================================== + Component: Article + ========================================================================== */ +.uk-article { + display: flow-root; +} +/* + * Remove margin from the last-child + */ +.uk-article > :last-child { + margin-bottom: 0; +} +/* Adjacent sibling + ========================================================================== */ +.uk-article + .uk-article { + margin-top: 70px; +} +/* Title + ========================================================================== */ +.uk-article-title { + font-size: 2.23125rem; + line-height: 1.2; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-article-title { + font-size: 2.625rem; + } +} +/* Meta + ========================================================================== */ +.uk-article-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +.uk-article-meta a { + color: #999; +} +.uk-article-meta a:hover { + color: #666; + text-decoration: none; +} +/* ======================================================================== + Component: Comment + ========================================================================== */ +/* Sections + ========================================================================== */ +.uk-comment-body { + display: flow-root; + overflow-wrap: break-word; + word-wrap: break-word; +} +.uk-comment-header { + display: flow-root; + margin-bottom: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-comment-body > :last-child, +.uk-comment-header > :last-child { + margin-bottom: 0; +} +/* Title + ========================================================================== */ +.uk-comment-title { + font-size: 1.25rem; + line-height: 1.4; +} +/* Meta + ========================================================================== */ +.uk-comment-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +/* Avatar + ========================================================================== */ +/* List + ========================================================================== */ +.uk-comment-list { + padding: 0; + list-style: none; +} +/* Adjacent siblings */ +.uk-comment-list > :nth-child(n+2) { + margin-top: 70px; +} +/* + * Sublists + * Note: General sibling selector allows reply block between comment and sublist + */ +.uk-comment-list .uk-comment ~ ul { + margin: 70px 0 0 0; + padding-right: 30px; + list-style: none; +} +/* Tablet and bigger */ +@media (min-width: 960px) { + .uk-comment-list .uk-comment ~ ul { + padding-right: 100px; + } +} +/* Adjacent siblings */ +.uk-comment-list .uk-comment ~ ul > :nth-child(n+2) { + margin-top: 70px; +} +/* Style modifier + ========================================================================== */ +.uk-comment-primary { + padding: 30px; + background-color: #f8f8f8; +} +/* ======================================================================== + Component: Search + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Reset `form` + */ +.uk-search { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + margin: 0; +} +/* Input + ========================================================================== */ +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X. + */ +.uk-search-input::-webkit-search-cancel-button, +.uk-search-input::-webkit-search-decoration { + -webkit-appearance: none; +} +/* + * Removes placeholder transparency in Firefox. + */ +.uk-search-input::-moz-placeholder { + opacity: 1; +} +/* + * 1. Define consistent box sizing. + * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera. + * 3. Remove `border-radius` in iOS. + * 4. Change font properties to `inherit` in all browsers + * 5. Show the overflow in Edge. + * 6. Remove default style in iOS. + * 7. Vertical alignment + * 8. Take the full container width + * 9. Style + */ +.uk-search-input { + /* 1 */ + box-sizing: border-box; + /* 2 */ + margin: 0; + /* 3 */ + border-radius: 0; + /* 4 */ + font: inherit; + /* 5 */ + overflow: visible; + /* 6 */ + -webkit-appearance: none; + /* 7 */ + vertical-align: middle; + /* 8 */ + width: 100%; + /* 9 */ + border: none; + color: #666; +} +.uk-search-input:focus { + outline: none; +} +/* Placeholder */ +.uk-search-input::placeholder { + color: #999; +} +/* Icon (Adopts `uk-icon`) + ========================================================================== */ +/* + * Position above input + * 1. Set position + * 2. Center icon vertically and horizontally + * 3. Style + */ +.uk-search .uk-search-icon { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + right: 0; + /* 2 */ + display: inline-flex; + justify-content: center; + align-items: center; + /* 3 */ + color: #999; +} +/* + * Required for `a`. + */ +.uk-search .uk-search-icon:hover { + color: #999; +} +/* + * Make `input` element clickable through icon, e.g. if it's a `span` + */ +.uk-search .uk-search-icon:not(a):not(button):not(input) { + pointer-events: none; +} +/* + * Position modifier + */ +.uk-search .uk-search-icon-flip { + left: 0; + right: auto; +} +/* Default modifier + ========================================================================== */ +.uk-search-default { + width: 240px; +} +/* + * Input + */ +.uk-search-default .uk-search-input { + height: 40px; + padding-right: 10px; + padding-left: 10px; + background: transparent; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-default .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-default .uk-search-icon { + padding-right: 10px; + padding-left: 10px; +} +.uk-search-default:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-right: 40px; +} +.uk-search-default:has(.uk-search-icon-flip) .uk-search-input { + padding-left: 40px; +} +/* Navbar modifier + ========================================================================== */ +.uk-search-navbar { + width: 240px; +} +/* + * Input + */ +.uk-search-navbar .uk-search-input { + height: 40px; + padding-right: 10px; + padding-left: 10px; + background: #fff; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-navbar .uk-search-input:focus { + background-color: #fff; + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-navbar .uk-search-icon { + padding-right: 10px; + padding-left: 10px; +} +.uk-search-navbar:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-right: 40px; +} +.uk-search-navbar:has(.uk-search-icon-flip) .uk-search-input { + padding-left: 40px; +} +/* Medium modifier + ========================================================================== */ +.uk-search-medium { + width: 400px; +} +/* + * Input + */ +.uk-search-medium .uk-search-input { + height: 55px; + padding-right: 12px; + padding-left: 12px; + background: transparent; + font-size: 1.5rem; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-medium .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-medium .uk-search-icon { + padding-right: 12px; + padding-left: 12px; +} +.uk-search-medium:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-right: 48px; +} +.uk-search-medium:has(.uk-search-icon-flip) .uk-search-input { + padding-left: 48px; +} +/* Large modifier + ========================================================================== */ +.uk-search-large { + width: 500px; +} +/* + * Input + */ +.uk-search-large .uk-search-input { + height: 90px; + padding-right: 20px; + padding-left: 20px; + background: transparent; + font-size: 2.625rem; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-large .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-large .uk-search-icon { + padding-right: 20px; + padding-left: 20px; +} +.uk-search-large:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-right: 80px; +} +.uk-search-large:has(.uk-search-icon-flip) .uk-search-input { + padding-left: 80px; +} +/* Toggle + ========================================================================== */ +.uk-search-toggle { + color: #999; +} +/* Hover */ +.uk-search-toggle:hover { + color: #666; +} +/* ======================================================================== + Component: Accordion + ========================================================================== */ +.uk-accordion { + padding: 0; + list-style: none; +} +/* Item + ========================================================================== */ +.uk-accordion > :nth-child(n+2) { + margin-top: 20px; +} +/* Title + ========================================================================== */ +.uk-accordion-title { + display: block; + font-size: 1.25rem; + line-height: 1.4; + color: #333; + overflow: hidden; +} +.uk-accordion-title::before { + content: ""; + width: 1.4em; + height: 1.4em; + margin-right: 10px; + float: left; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +.uk-open > .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* Hover */ +.uk-accordion-title:hover { + color: #666; + text-decoration: none; +} +/* Content + ========================================================================== */ +.uk-accordion-content { + display: flow-root; + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-accordion-content > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Drop + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Set a default width + */ +.uk-drop { + /* 1 */ + display: none; + /* 2 */ + position: absolute; + z-index: 1020; + --uk-position-offset: 20px; + --uk-position-viewport-offset: 15px; + /* 3 */ + box-sizing: border-box; + width: 300px; +} +/* Show */ +.uk-drop.uk-open { + display: block; +} +/* Grid modifiers + ========================================================================== */ +.uk-drop-stack .uk-drop-grid > * { + width: 100% !important; +} +/* Parent icon + ========================================================================== */ +.uk-drop-parent-icon { + margin-right: 0.25em; + transition: transform 0.3s ease-out; +} +[aria-expanded="true"] > .uk-drop-parent-icon { + transform: rotateX(180deg); +} +/* ======================================================================== + Component: Dropbar + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Reset drop + * 2. Style + */ +.uk-dropbar { + --uk-position-offset: 0; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 0; + --uk-inverse: dark; + /* 1 */ + width: auto; + /* 2 */ + padding: 25px 15px 25px 15px; + background: #fff; + color: #666; +} +/* + * Remove margin from the last-child + */ +.uk-dropbar > :last-child { + margin-bottom: 0; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-dropbar { + padding-right: 30px; + padding-left: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-dropbar { + padding-right: 40px; + padding-left: 40px; + } +} +.uk-dropbar :focus-visible { + outline-color: #333 !important; +} +/* Size modifier + ========================================================================== */ +.uk-dropbar-large { + padding-top: 40px; + padding-bottom: 40px; +} +/* Direction modifier + ========================================================================== */ +.uk-dropbar-top { + box-shadow: 0 12px 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-bottom { + box-shadow: 0 -12px 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-right { + box-shadow: -12px 0 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-left { + box-shadow: 12px 0 7px -6px rgba(0, 0, 0, 0.05); +} +/* ======================================================================== + Component: Dropnav + ========================================================================== */ +/* + * 1. Position + * 2. Reset dropbar + * 3. Width + */ +.uk-dropnav-dropbar { + /* 1 */ + position: absolute; + z-index: 980; + /* 2 */ + padding: 0; + /* 3 */ + right: 0; + left: 0; +} +/* ======================================================================== + Component: Modal + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Allow scrolling for the modal dialog + * 4. Horizontal padding + * 5. Mask the background page + * 6. Fade-in transition + */ +.uk-modal { + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + z-index: 1010; + /* 3 */ + overflow-y: auto; + /* 4 */ + padding: 15px 15px; + /* 5 */ + background: rgba(0, 0, 0, 0.6); + /* 6 */ + opacity: 0; + transition: opacity 0.15s linear; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-modal { + padding: 50px 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-modal { + padding-right: 40px; + padding-left: 40px; + } +} +/* + * Open + */ +.uk-modal.uk-open { + opacity: 1; +} +/* Page + ========================================================================== */ +/* + * Prevent scrollbars + */ +.uk-modal-page { + overflow: hidden; +} +/* Dialog + ========================================================================== */ +/* + * 1. Create position context for spinner and close button + * 2. Dimensions + * 3. `!important` is needed to overwrite `uk-width-auto`. See `#modal-media-image` in tests + * 4. Style + * 5. Slide-in transition + */ +.uk-modal-dialog { + /* 1 */ + position: relative; + /* 2 */ + box-sizing: border-box; + margin: 0 auto; + width: 600px; + /* 3 */ + max-width: 100% !important; + /* 4 */ + background: #fff; + /* 5 */ + opacity: 0; + transform: translateY(-100px); + transition: 0.3s linear; + transition-property: opacity, transform; +} +/* + * Open + */ +.uk-open > .uk-modal-dialog { + opacity: 1; + transform: translateY(0); +} +/* Size modifier + ========================================================================== */ +/* + * Container size + * Take the same size as the Container component + */ +.uk-modal-container .uk-modal-dialog { + width: 1200px; +} +/* + * Full size + * 1. Remove padding and background from modal + * 2. Reset all default declarations from modal dialog + */ +/* 1 */ +.uk-modal-full { + padding: 0; + background: none; +} +/* 2 */ +.uk-modal-full .uk-modal-dialog { + margin: 0; + width: 100%; + max-width: 100%; + transform: translateY(0); +} +/* Sections + ========================================================================== */ +.uk-modal-body { + display: flow-root; + padding: 20px 20px; +} +.uk-modal-header { + display: flow-root; + padding: 10px 20px; + background: #fff; + border-bottom: 1px solid #e5e5e5; +} +.uk-modal-footer { + display: flow-root; + padding: 10px 20px; + background: #fff; + border-top: 1px solid #e5e5e5; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-modal-body { + padding: 30px 30px; + } + .uk-modal-header { + padding: 15px 30px; + } + .uk-modal-footer { + padding: 15px 30px; + } +} +/* + * Remove margin from the last-child + */ +.uk-modal-body > :last-child, +.uk-modal-header > :last-child, +.uk-modal-footer > :last-child { + margin-bottom: 0; +} +/* Title + ========================================================================== */ +.uk-modal-title { + font-size: 2rem; + line-height: 1.3; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +[class*="uk-modal-close-"] { + position: absolute; + z-index: 1010; + top: 10px; + left: 10px; + padding: 5px; +} +/* + * Remove margin from adjacent element + */ +[class*="uk-modal-close-"]:first-child + * { + margin-top: 0; +} +/* + * Hover + */ +/* + * Default + */ +/* + * Outside + * 1. Prevent scrollbar on small devices + */ +.uk-modal-close-outside { + top: 0; + /* 1 */ + left: -5px; + transform: translate(0, -100%); + color: #ffffff; +} +.uk-modal-close-outside:hover { + color: #fff; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + /* 1 */ + .uk-modal-close-outside { + left: 0; + transform: translate(-100%, -100%); + } +} +/* + * Full + */ +.uk-modal-close-full { + top: 0; + left: 0; + padding: 10px; + background: #fff; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-modal-close-full { + padding: 20px; + } +} +/* ======================================================================== + Component: Slideshow + ========================================================================== */ +/* + * 1. Prevent tab highlighting on iOS. + */ +.uk-slideshow { + /* 1 */ + -webkit-tap-highlight-color: transparent; +} +/* Items + ========================================================================== */ +/* + * 1. Create position and stacking context + * 2. Reset list + * 3. Clip child elements + * 4. Prevent displaying the callout information on iOS. + * 5. Disable horizontal panning gestures + */ +.uk-slideshow-items { + /* 1 */ + position: relative; + z-index: 0; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + overflow: hidden; + /* 4 */ + -webkit-touch-callout: none; + /* 5 */ + touch-action: pan-y; +} +/* Item + ========================================================================== */ +/* + * 1. Position items above each other + * 2. Take the full width + * 3. Clip child elements, e.g. for `uk-cover` + * 4. Optimize animation + */ +.uk-slideshow-items > * { + /* 1 */ + position: absolute; + top: 0; + right: 0; + /* 2 */ + left: 0; + bottom: 0; + /* 3 */ + overflow: hidden; + /* 4 */ + will-change: transform, opacity; +} +/* + * Hide not active items + */ +.uk-slideshow-items > :not(.uk-active) { + display: none; +} +/* ======================================================================== + Component: Slider + ========================================================================== */ +/* + * 1. Prevent tab highlighting on iOS. + */ +.uk-slider { + /* 1 */ + -webkit-tap-highlight-color: transparent; +} +/* Container + ========================================================================== */ +/* + * 1. Clip child elements + * 2. Prevent accidental scrolling through elements in slide getting focused + */ +.uk-slider-container { + /* 1 */ + overflow: hidden; + /* 2 */ + overflow: clip; +} +/* + * Widen container to prevent box-shadows from clipping, `large-box-shadow` + */ +.uk-slider-container-offset { + margin: -11px -25px -39px -25px; + padding: 11px 25px 39px 25px; +} +/* Items + ========================================================================== */ +/* + * 1. Optimize animation + * 2. Create a containing block. In Safari it's neither created by `transform` nor `will-change`. + * 3. Disable horizontal panning gestures + */ +.uk-slider-items { + /* 1 */ + will-change: transform; + /* 2 */ + position: relative; + /* 3 */ + touch-action: pan-y; +} +/* + * 1. Reset list style without interfering with grid + * 2. Prevent displaying the callout information on iOS. + */ +.uk-slider-items:not(.uk-grid) { + display: flex; + /* 1 */ + margin: 0; + padding: 0; + list-style: none; + /* 2 */ + -webkit-touch-callout: none; +} +.uk-slider-items.uk-grid { + flex-wrap: nowrap; +} +/* Item + ========================================================================== */ +/* + * 1. Let items take content dimensions (0 0 auto) + * `max-width` needed to keep image responsiveness and prevent content overflow + * 2. Create position context + */ +.uk-slider-items > * { + /* 1 */ + flex: none !important; + box-sizing: border-box; + max-width: 100%; + /* 2 */ + position: relative; +} +/* ======================================================================== + Component: Sticky + ========================================================================== */ +/* + * 1. Create position context so it's t the same like when fixed. + * 2. Create stacking context already when not sticky to have the same context +* for position set to `sticky` and `relative` + * 2. More robust if padding and border are used and the sticky height is transitioned + */ +.uk-sticky { + /* 1 */ + position: relative; + /* 2 */ + z-index: 980; + /* 3 */ + box-sizing: border-box; +} +.uk-sticky-fixed { + margin: 0 !important; +} +/* + * Faster animations + */ +.uk-sticky[class*="uk-animation-"] { + animation-duration: 0.2s; +} +.uk-sticky.uk-animation-reverse { + animation-duration: 0.2s; +} +/* + * Placeholder + * Make content clickable for sticky cover and reveal effects + */ +.uk-sticky-placeholder { + pointer-events: none; +} +/* ======================================================================== + Component: Off-canvas + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + */ +.uk-offcanvas { + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + bottom: 0; + right: 0; + z-index: 1000; +} +/* + * Flip modifier + */ +.uk-offcanvas-flip .uk-offcanvas { + left: 0; + right: auto; +} +/* Bar + ========================================================================== */ +/* + * 1. Set position + * 2. Size and style + * 3. Allow scrolling + */ +.uk-offcanvas-bar { + --uk-inverse: light; + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + right: -270px; + /* 2 */ + box-sizing: border-box; + width: 270px; + padding: 20px 20px; + background: #222; + /* 3 */ + overflow-y: auto; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-bar { + right: -350px; + width: 350px; + padding: 30px 30px; + } +} +/* Flip modifier */ +.uk-offcanvas-flip .uk-offcanvas-bar { + right: auto; + left: -270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-flip .uk-offcanvas-bar { + left: -350px; + } +} +/* + * Open + */ +.uk-open > .uk-offcanvas-bar { + right: 0; +} +.uk-offcanvas-flip .uk-open > .uk-offcanvas-bar { + right: auto; + left: 0; +} +/* + * Slide Animation (Used in slide and push mode) + */ +.uk-offcanvas-bar-animation { + transition: right 0.3s ease-out; +} +.uk-offcanvas-flip .uk-offcanvas-bar-animation { + transition-property: left; +} +/* + * Reveal Animation + * 1. Set position + * 2. Clip the bar + * 3. Animation + * 4. Reset position + */ +.uk-offcanvas-reveal { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + right: 0; + /* 2 */ + width: 0; + overflow: hidden; + /* 3 */ + transition: width 0.3s ease-out; +} +.uk-offcanvas-reveal .uk-offcanvas-bar { + /* 4 */ + right: 0; +} +.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar { + /* 4 */ + right: auto; + left: 0; +} +.uk-open > .uk-offcanvas-reveal { + width: 270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-open > .uk-offcanvas-reveal { + width: 350px; + } +} +/* + * Flip modifier + */ +.uk-offcanvas-flip .uk-offcanvas-reveal { + left: 0; + right: auto; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-offcanvas-close { + position: absolute; + z-index: 1000; + top: 5px; + left: 5px; + padding: 5px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-close { + top: 10px; + left: 10px; + } +} +/* + * Remove margin from adjacent element + */ +.uk-offcanvas-close:first-child + * { + margin-top: 0; +} +/* Overlay + ========================================================================== */ +/* + * Overlay the whole page. Needed for the `::before` + * 1. Using `100vw` so no modification is needed when off-canvas is flipped + * 2. Allow for closing with swipe gesture on devices with pointer events. + */ +.uk-offcanvas-overlay { + /* 1 */ + width: 100vw; + /* 2 */ + touch-action: none; +} +/* + * 1. Mask the whole page + * 2. Fade-in transition + */ +.uk-offcanvas-overlay::before { + /* 1 */ + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: rgba(0, 0, 0, 0.1); + /* 2 */ + opacity: 0; + transition: opacity 0.15s linear; +} +.uk-offcanvas-overlay.uk-open::before { + opacity: 1; +} +/* Prevent scrolling + ========================================================================== */ +/* + * Prevent horizontal scrollbar when the content is slide-out + * Has to be on the `html` element too to make it work on the `body` + * 1. `clip` is needed for `position: sticky` elements to keep their position + */ +.uk-offcanvas-page, +.uk-offcanvas-container { + overflow-x: hidden; + /* 1 */ + overflow-x: clip; +} +/* Container + ========================================================================== */ +/* + * Prepare slide-out animation (Used in reveal and push mode) + * Using `position: left` instead of `transform` because position `fixed` elements like sticky navbars + * lose their fixed state and behaves like `absolute` within a transformed container + * 1. Provide a fixed width and prevent shrinking + */ +.uk-offcanvas-container { + position: relative; + right: 0; + transition: right 0.3s ease-out; + /* 1 */ + box-sizing: border-box; + width: 100%; +} +/* + * Activate slide-out animation + */ +:not(.uk-offcanvas-flip).uk-offcanvas-container-animation { + right: 270px; +} +.uk-offcanvas-flip.uk-offcanvas-container-animation { + right: -270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + :not(.uk-offcanvas-flip).uk-offcanvas-container-animation { + right: 350px; + } + .uk-offcanvas-flip.uk-offcanvas-container-animation { + right: -350px; + } +} +/* ======================================================================== + Component: Switcher + ========================================================================== */ +/* + * Reset list + */ +.uk-switcher { + margin: 0; + padding: 0; + list-style: none; +} +/* Items + ========================================================================== */ +/* + * Hide not active items + */ +.uk-switcher > :not(.uk-active) { + display: none; +} +/* + * Remove margin from the last-child + */ +.uk-switcher > * > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Leader + ========================================================================== */ +.uk-leader { + overflow: hidden; +} +/* + * 1. Place element in text flow + * 2. Never break into a new line + * 3. Get a string back with as many repeating characters to fill the container + * 4. Prevent wrapping. Overflowing characters will be clipped by the container + */ +.uk-leader-fill::after { + /* 1 */ + display: inline-block; + margin-right: 15px; + /* 2 */ + width: 0; + /* 3 */ + content: attr(data-fill); + /* 4 */ + white-space: nowrap; +} +/* + * Hide if media does not match + */ +.uk-leader-fill.uk-leader-hide::after { + display: none; +} +/* + * Pass fill character to JS + */ +:root { + --uk-leader-fill-content: .; +} +/* ======================================================================== + Component: Notification + ========================================================================== */ +/* + * 1. Set position + * 2. Dimensions + */ +.uk-notification { + /* 1 */ + position: fixed; + top: 10px; + right: 10px; + z-index: 1040; + /* 2 */ + box-sizing: border-box; + width: 350px; +} +/* Position modifiers +========================================================================== */ +.uk-notification-top-left, +.uk-notification-bottom-left { + right: auto; + left: 10px; +} +.uk-notification-top-center, +.uk-notification-bottom-center { + right: 50%; + margin-right: -175px; +} +.uk-notification-bottom-right, +.uk-notification-bottom-left, +.uk-notification-bottom-center { + top: auto; + bottom: 10px; +} +/* Responsiveness +========================================================================== */ +/* Phones portrait and smaller */ +@media (max-width: 639px) { + .uk-notification { + right: 10px; + left: 10px; + width: auto; + margin: 0; + } +} +/* Message +========================================================================== */ +.uk-notification-message { + position: relative; + padding: 15px; + background: #f8f8f8; + color: #666; + font-size: 1.25rem; + line-height: 1.4; + cursor: pointer; +} +* + .uk-notification-message { + margin-top: 10px; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-notification-close { + display: none; + position: absolute; + top: 20px; + left: 15px; +} +.uk-notification-message:hover .uk-notification-close { + display: block; +} +/* Style modifiers + ========================================================================== */ +/* + * Primary + */ +.uk-notification-message-primary { + color: #1e87f0; +} +/* + * Success + */ +.uk-notification-message-success { + color: #32d296; +} +/* + * Warning + */ +.uk-notification-message-warning { + color: #faa05a; +} +/* + * Danger + */ +.uk-notification-message-danger { + color: #f0506e; +} +/* ======================================================================== + Component: Tooltip + ========================================================================== */ +/* + * 1. Hide by default + * 2. Position + * 3. Remove tooltip from document flow to keep the UIkit container from changing its size when injected into the document initially + * 4. Dimensions + * 5. Style + */ +.uk-tooltip { + /* 1 */ + display: none; + /* 2 */ + position: absolute; + z-index: 1030; + --uk-position-offset: 10px; + --uk-position-viewport-offset: 10; + /* 3 */ + top: 0; + /* 4 */ + box-sizing: border-box; + max-width: 200px; + padding: 3px 6px; + /* 5 */ + background: #666; + border-radius: 2px; + color: #fff; + font-size: 12px; +} +/* Show */ +.uk-tooltip.uk-active { + display: block; +} +/* ======================================================================== + Component: Sortable + ========================================================================== */ +.uk-sortable { + position: relative; +} +/* + * Remove margin from the last-child + */ +.uk-sortable > :last-child { + margin-bottom: 0; +} +/* Drag + ========================================================================== */ +.uk-sortable-drag { + position: fixed !important; + z-index: 1050 !important; + pointer-events: none; +} +/* Placeholder + ========================================================================== */ +.uk-sortable-placeholder { + opacity: 0; + pointer-events: none; +} +/* Empty modifier + ========================================================================== */ +.uk-sortable-empty { + min-height: 50px; +} +/* Handle + ========================================================================== */ +/* Hover */ +.uk-sortable-handle:hover { + cursor: move; +} +/* ======================================================================== + Component: Countdown + ========================================================================== */ +/* Item + ========================================================================== */ +/* Number + ========================================================================== */ +/* + * 1. Make numbers all of the same size to prevent jumping. Must be supported by the font. + * 2. Style + */ +.uk-countdown-number { + /* 1 */ + font-variant-numeric: tabular-nums; + /* 2 */ + font-size: 2rem; + line-height: 0.8; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-countdown-number { + font-size: 4rem; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-countdown-number { + font-size: 6rem; + } +} +/* Separator + ========================================================================== */ +.uk-countdown-separator { + font-size: 1rem; + line-height: 1.6; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-countdown-separator { + font-size: 2rem; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-countdown-separator { + font-size: 3rem; + } +} +/* Label + ========================================================================== */ +/* ======================================================================== + Component: Thumbnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-thumbnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-right: -15px; +} +/* + * Space is allocated based on content dimensions, but shrinks: 0 1 auto + * 1. Gutter + */ +.uk-thumbnav > * { + /* 1 */ + padding-right: 15px; +} +/* Items + ========================================================================== */ +/* + * Items + */ +.uk-thumbnav > * > * { + display: inline-block; + position: relative; +} +.uk-thumbnav > * > *::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + background-image: linear-gradient(-180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4)); + transition: opacity 0.1s ease-in-out; +} +/* Hover */ +.uk-thumbnav > * > :hover::after { + opacity: 0; +} +/* Active */ +.uk-thumbnav > .uk-active > *::after { + opacity: 0; +} +/* Modifier: 'uk-thumbnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-thumbnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-right: 0; + margin-top: -15px; +} +/* 2 */ +.uk-thumbnav-vertical > * { + padding-right: 0; + padding-top: 15px; +} +/* ======================================================================== + Component: Iconnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-iconnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-right: -10px; +} +/* + * Space is allocated based on content dimensions, but shrinks: 0 1 auto + * 1. Gutter + */ +.uk-iconnav > * { + /* 1 */ + padding-right: 10px; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * 1. Center content vertically if there is still some text + * 2. Imitate white space gap when using flexbox + * 3. Force text not to affect item height + * 4. Style + * 5. Required for `a` if there is still some text + */ +.uk-iconnav > * > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + line-height: 0; + /* 4 */ + color: #999; + /* 5 */ + text-decoration: none; + font-size: 0.875rem; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-iconnav > * > a:hover { + color: #666; +} +/* Active */ +.uk-iconnav > .uk-active > a { + color: #666; +} +/* Modifier: 'uk-iconnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-iconnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-right: 0; + margin-top: -10px; +} +/* 2 */ +.uk-iconnav-vertical > * { + padding-right: 0; + padding-top: 10px; +} +/* ======================================================================== + Component: Grid + ========================================================================== */ +/* + * 1. Allow cells to wrap into the next line + * 2. Reset list + */ +.uk-grid { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; +} +/* + * Grid cell + * Note: Space is allocated solely based on content dimensions, but shrinks: 0 1 auto + * Reset margin for e.g. paragraphs + */ +.uk-grid > * { + margin: 0; +} +/* + * Remove margin from the last-child + */ +.uk-grid > * > :last-child { + margin-bottom: 0; +} +/* Gutter + ========================================================================== */ +/* + * Default + */ +/* Horizontal */ +.uk-grid { + margin-right: -30px; +} +.uk-grid > * { + padding-right: 30px; +} +/* Vertical */ +.uk-grid + .uk-grid, +.uk-grid > .uk-grid-margin, +* + .uk-grid-margin { + margin-top: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid { + margin-right: -40px; + } + .uk-grid > * { + padding-right: 40px; + } + /* Vertical */ + .uk-grid + .uk-grid, + .uk-grid > .uk-grid-margin, + * + .uk-grid-margin { + margin-top: 40px; + } +} +/* + * Small + */ +/* Horizontal */ +.uk-grid-small, +.uk-grid-column-small { + margin-right: -15px; +} +.uk-grid-small > *, +.uk-grid-column-small > * { + padding-right: 15px; +} +/* Vertical */ +.uk-grid + .uk-grid-small, +.uk-grid + .uk-grid-row-small, +.uk-grid-small > .uk-grid-margin, +.uk-grid-row-small > .uk-grid-margin, +* + .uk-grid-margin-small { + margin-top: 15px; +} +/* + * Medium + */ +/* Horizontal */ +.uk-grid-medium, +.uk-grid-column-medium { + margin-right: -30px; +} +.uk-grid-medium > *, +.uk-grid-column-medium > * { + padding-right: 30px; +} +/* Vertical */ +.uk-grid + .uk-grid-medium, +.uk-grid + .uk-grid-row-medium, +.uk-grid-medium > .uk-grid-margin, +.uk-grid-row-medium > .uk-grid-margin, +* + .uk-grid-margin-medium { + margin-top: 30px; +} +/* + * Large + */ +/* Horizontal */ +.uk-grid-large, +.uk-grid-column-large { + margin-right: -40px; +} +.uk-grid-large > *, +.uk-grid-column-large > * { + padding-right: 40px; +} +/* Vertical */ +.uk-grid + .uk-grid-large, +.uk-grid + .uk-grid-row-large, +.uk-grid-large > .uk-grid-margin, +.uk-grid-row-large > .uk-grid-margin, +* + .uk-grid-margin-large { + margin-top: 40px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-large, + .uk-grid-column-large { + margin-right: -70px; + } + .uk-grid-large > *, + .uk-grid-column-large > * { + padding-right: 70px; + } + /* Vertical */ + .uk-grid + .uk-grid-large, + .uk-grid + .uk-grid-row-large, + .uk-grid-large > .uk-grid-margin, + .uk-grid-row-large > .uk-grid-margin, + * + .uk-grid-margin-large { + margin-top: 70px; + } +} +/* + * Collapse + */ +/* Horizontal */ +.uk-grid-collapse, +.uk-grid-column-collapse { + margin-right: 0; +} +.uk-grid-collapse > *, +.uk-grid-column-collapse > * { + padding-right: 0; +} +/* Vertical */ +.uk-grid + .uk-grid-collapse, +.uk-grid + .uk-grid-row-collapse, +.uk-grid-collapse > .uk-grid-margin, +.uk-grid-row-collapse > .uk-grid-margin { + margin-top: 0; +} +/* Divider + ========================================================================== */ +.uk-grid-divider > * { + position: relative; +} +.uk-grid-divider > :not(.uk-first-column)::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + border-right: 1px solid #e5e5e5; +} +/* Vertical */ +.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + content: ""; + position: absolute; + right: 0; + left: 0; + border-top: 1px solid #e5e5e5; +} +/* + * Default + */ +/* Horizontal */ +.uk-grid-divider { + margin-right: -60px; +} +.uk-grid-divider > * { + padding-right: 60px; +} +.uk-grid-divider > :not(.uk-first-column)::before { + right: 30px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-stack > .uk-grid-margin { + margin-top: 60px; +} +.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + top: -30px; + right: 60px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-divider { + margin-right: -80px; + } + .uk-grid-divider > * { + padding-right: 80px; + } + .uk-grid-divider > :not(.uk-first-column)::before { + right: 40px; + } + /* Vertical */ + .uk-grid-divider.uk-grid-stack > .uk-grid-margin { + margin-top: 80px; + } + .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + top: -40px; + right: 80px; + } +} +/* + * Small + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-small, +.uk-grid-divider.uk-grid-column-small { + margin-right: -30px; +} +.uk-grid-divider.uk-grid-small > *, +.uk-grid-divider.uk-grid-column-small > * { + padding-right: 30px; +} +.uk-grid-divider.uk-grid-small > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-small > :not(.uk-first-column)::before { + right: 15px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin { + margin-top: 30px; +} +.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before { + top: -15px; + right: 30px; +} +.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin::before { + top: -15px; +} +.uk-grid-divider.uk-grid-column-small.uk-grid-stack > .uk-grid-margin::before { + right: 30px; +} +/* + * Medium + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-medium, +.uk-grid-divider.uk-grid-column-medium { + margin-right: -60px; +} +.uk-grid-divider.uk-grid-medium > *, +.uk-grid-divider.uk-grid-column-medium > * { + padding-right: 60px; +} +.uk-grid-divider.uk-grid-medium > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-medium > :not(.uk-first-column)::before { + right: 30px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin { + margin-top: 60px; +} +.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before { + top: -30px; + right: 60px; +} +.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin::before { + top: -30px; +} +.uk-grid-divider.uk-grid-column-medium.uk-grid-stack > .uk-grid-margin::before { + right: 60px; +} +/* + * Large + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-large, +.uk-grid-divider.uk-grid-column-large { + margin-right: -80px; +} +.uk-grid-divider.uk-grid-large > *, +.uk-grid-divider.uk-grid-column-large > * { + padding-right: 80px; +} +.uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { + right: 40px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { + margin-top: 80px; +} +.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before { + top: -40px; + right: 80px; +} +.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { + top: -40px; +} +.uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { + right: 80px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-divider.uk-grid-large, + .uk-grid-divider.uk-grid-column-large { + margin-right: -140px; + } + .uk-grid-divider.uk-grid-large > *, + .uk-grid-divider.uk-grid-column-large > * { + padding-right: 140px; + } + .uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before, + .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { + right: 70px; + } + /* Vertical */ + .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin, + .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { + margin-top: 140px; + } + .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before { + top: -70px; + right: 140px; + } + .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { + top: -70px; + } + .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { + right: 140px; + } +} +/* Match child of a grid cell + ========================================================================== */ +/* + * Behave like a block element + * 1. Wrap into the next line + * 2. Take the full width, at least 100%. Only if no class from the Width component is set. + * 3. Expand width even if larger than 100%, e.g. because of negative margin (Needed for nested grids) + */ +.uk-grid-match > *, +.uk-grid-item-match { + display: flex; + /* 1 */ + flex-wrap: wrap; +} +.uk-grid-match > * > :not([class*="uk-width"]), +.uk-grid-item-match > :not([class*="uk-width"]) { + /* 2 */ + box-sizing: border-box; + width: 100%; + /* 3 */ + flex: auto; +} +/* ======================================================================== + Component: Nav + ========================================================================== */ +/* + * Reset + */ +.uk-nav, +.uk-nav ul { + margin: 0; + padding: 0; + list-style: none; +} +/* +* 1. Center content vertically, e.g. an icon +* 2. Imitate white space gap when using flexbox +* 3. Reset link + */ +.uk-nav li > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3*/ + text-decoration: none; +} +/* + * Items + * Must target `a` elements to exclude other elements (e.g. lists) + */ +.uk-nav > li > a { + padding: 5px 0; +} +/* Sublists + ========================================================================== */ +/* + * Level 2 + * `ul` needed for higher specificity to override padding + */ +ul.uk-nav-sub { + padding: 5px 15px 5px 0; +} +/* + * Level 3 and deeper + */ +.uk-nav-sub ul { + padding-right: 15px; +} +/* + * Items + */ +.uk-nav-sub a { + padding: 2px 0; +} +/* Parent icon + ========================================================================== */ +.uk-nav-parent-icon { + margin-right: auto; + transition: transform 0.3s ease-out; +} +.uk-nav > li.uk-open > a .uk-nav-parent-icon { + transform: rotateX(180deg); +} +/* Header + ========================================================================== */ +.uk-nav-header { + padding: 5px 0; + text-transform: uppercase; + font-size: 0.875rem; +} +.uk-nav-header:not(:first-child) { + margin-top: 20px; +} +/* Divider + ========================================================================== */ +.uk-nav .uk-nav-divider { + margin: 5px 0; +} +/* Default modifier + ========================================================================== */ +.uk-nav-default { + font-size: 0.875rem; + line-height: 1.5; +} +/* + * Items + */ +.uk-nav-default > li > a { + color: #999; +} +/* Hover */ +.uk-nav-default > li > a:hover { + color: #666; +} +/* Active */ +.uk-nav-default > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-nav-default .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-nav-default .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-default .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-default .uk-nav-sub { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-nav-default .uk-nav-sub a { + color: #999; +} +.uk-nav-default .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-default .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Primary modifier + ========================================================================== */ +.uk-nav-primary { + font-size: 1.5rem; + line-height: 1.5; +} +/* + * Items + */ +.uk-nav-primary > li > a { + color: #999; +} +/* Hover */ +.uk-nav-primary > li > a:hover { + color: #666; +} +/* Active */ +.uk-nav-primary > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-nav-primary .uk-nav-subtitle { + font-size: 1.25rem; +} +/* + * Header + */ +.uk-nav-primary .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-primary .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-primary .uk-nav-sub { + font-size: 1.25rem; + line-height: 1.5; +} +.uk-nav-primary .uk-nav-sub a { + color: #999; +} +.uk-nav-primary .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-primary .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Secondary modifier + ========================================================================== */ +.uk-nav-secondary { + font-size: 16px; + line-height: 1.5; +} +.uk-nav-secondary > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + margin-top: 0; +} +/* + * Items + */ +.uk-nav-secondary > li > a { + color: #333; + padding: 10px 10px; +} +/* Hover */ +.uk-nav-secondary > li > a:hover { + color: #333; + background-color: #f8f8f8; +} +/* Active */ +.uk-nav-secondary > li.uk-active > a { + color: #333; + background-color: #f8f8f8; +} +/* + * Subtitle + */ +.uk-nav-secondary .uk-nav-subtitle { + font-size: 0.875rem; + color: #999; +} +/* Hover */ +.uk-nav-secondary > li > a:hover .uk-nav-subtitle { + color: #666; +} +/* Active */ +.uk-nav-secondary > li.uk-active > a .uk-nav-subtitle { + color: #333; +} +/* + * Header + */ +.uk-nav-secondary .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-secondary .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-secondary .uk-nav-sub { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-nav-secondary .uk-nav-sub a { + color: #999; +} +.uk-nav-secondary .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-secondary .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Size modifier + ========================================================================== */ +/* + * Medium + */ +.uk-nav-medium { + font-size: 2.8875rem; + line-height: 1; +} +.uk-nav-large { + font-size: 3.4rem; + line-height: 1; +} +.uk-nav-xlarge { + font-size: 4rem; + line-height: 1; +} +/* Tablet Landscape and bigger */ +@media (min-width: 960px) { + .uk-nav-medium { + font-size: 3.5rem; + } + .uk-nav-large { + font-size: 4rem; + } + .uk-nav-xlarge { + font-size: 6rem; + } +} +/* Laptop and bigger */ +@media (min-width: 1200px) { + .uk-nav-medium { + font-size: 4rem; + } + .uk-nav-large { + font-size: 6rem; + } + .uk-nav-xlarge { + font-size: 8rem; + } +} +/* Alignment modifier + ========================================================================== */ +/* + * 1. Center header + * 2. Center items + */ +/* 1 */ +.uk-nav-center { + text-align: center; +} +/* 2 */ +.uk-nav-center li > a { + justify-content: center; +} +/* Sublists */ +.uk-nav-center .uk-nav-sub, +.uk-nav-center .uk-nav-sub ul { + padding-right: 0; +} +/* Parent icon */ +.uk-nav-center .uk-nav-parent-icon { + margin-right: 0.25em; +} +/* Style modifier + ========================================================================== */ +/* + * Divider + * Naming is in plural to prevent conflicts with divider sub object. + */ +.uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + margin-top: 5px; + padding-top: 5px; + border-top: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Navbar + ========================================================================== */ +/* + * 1. Create position context to center navbar group + */ +.uk-navbar { + display: flex; + /* 1 */ + position: relative; +} +/* Container + ========================================================================== */ +.uk-navbar-container:not(.uk-navbar-transparent) { + background: #f8f8f8; +} +/* Groups + ========================================================================== */ +/* + * 1. Align navs and items vertically if they have a different height + */ +.uk-navbar-right, +.uk-navbar-left, +[class*="uk-navbar-center"] { + display: flex; + gap: 15px; + /* 1 */ + align-items: center; +} +/* + * Horizontal alignment + * 1. Create position context for centered navbar with sub groups (left/right) + * 2. Fix text wrapping if content is larger than 50% of the container. + * 3. Needed for dropdowns because a new position context is created + * `z-index` must be smaller than off-canvas + * 4. Align sub groups for centered navbar + */ +.uk-navbar-left { + margin-right: auto; +} +.uk-navbar-center:only-child { + margin-right: auto; + margin-left: auto; + /* 1 */ + position: relative; +} +.uk-navbar-center:not(:only-child) { + position: absolute; + top: 50%; + right: 50%; + transform: translate(50%, -50%); + /* 2 */ + width: max-content; + box-sizing: border-box; + /* 3 */ + z-index: 990; +} +/* 4 */ +.uk-navbar-center-right, +.uk-navbar-center-left { + position: absolute; + top: 0; +} +.uk-navbar-center-right { + left: calc(100% + 15px); +} +.uk-navbar-center-left { + right: calc(100% + 15px); +} +[class*="uk-navbar-center-"] { + width: max-content; + box-sizing: border-box; +} +/* Nav + ========================================================================== */ +/* + * 1. Reset list + */ +.uk-navbar-nav { + display: flex; + gap: 15px; + /* 1 */ + margin: 0; + padding: 0; + list-style: none; +} +/* + * Allow items to wrap into the next line + * Only not `absolute` positioned groups + */ +.uk-navbar-right, +.uk-navbar-left, +.uk-navbar-center:only-child { + flex-wrap: wrap; +} +/* + * Items + * 1. Center content vertically and horizontally + * 2. Imitate white space gap when using flexbox + * 3. Dimensions + * 4. Style + * 5. Required for `a` + */ +.uk-navbar-nav > li > a, +.uk-navbar-item, +.uk-navbar-toggle { + /* 1 */ + display: flex; + justify-content: center; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + box-sizing: border-box; + min-height: 80px; + /* 4 */ + font-size: 0.875rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 5 */ + text-decoration: none; +} +/* + * Nav items + */ +.uk-navbar-nav > li > a { + padding: 0 0; + color: #999; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* + * Hover + * Apply hover style also if dropdown is opened + */ +.uk-navbar-nav > li:hover > a, +.uk-navbar-nav > li > a[aria-expanded="true"] { + color: #666; +} +/* OnClick */ +.uk-navbar-nav > li > a:active { + color: #333; +} +/* Active */ +.uk-navbar-nav > li.uk-active > a { + color: #333; +} +/* Parent icon modifier + ========================================================================== */ +.uk-navbar-parent-icon { + margin-right: 4px; + transition: transform 0.3s ease-out; +} +.uk-navbar-nav > li > a[aria-expanded="true"] .uk-navbar-parent-icon { + transform: rotateX(180deg); +} +/* Item + ========================================================================== */ +.uk-navbar-item { + padding: 0 0; + color: #666; +} +/* + * Remove margin from the last-child + */ +.uk-navbar-item > :last-child { + margin-bottom: 0; +} +/* Toggle + ========================================================================== */ +.uk-navbar-toggle { + padding: 0 0; + color: #999; +} +.uk-navbar-toggle:hover, +.uk-navbar-toggle[aria-expanded="true"] { + color: #666; + text-decoration: none; +} +/* + * Icon + * Adopts `uk-icon` + */ +/* Hover */ +/* Subtitle + ========================================================================== */ +.uk-navbar-subtitle { + font-size: 0.875rem; +} +/* Justify modifier + ========================================================================== */ +.uk-navbar-justify .uk-navbar-right, +.uk-navbar-justify .uk-navbar-left, +.uk-navbar-justify .uk-navbar-nav, +.uk-navbar-justify .uk-navbar-nav > li, +.uk-navbar-justify .uk-navbar-item, +.uk-navbar-justify .uk-navbar-toggle { + flex-grow: 1; +} +/* Style modifiers + ========================================================================== */ +/* Dropdown + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Set a default width + * 2. Style + */ +.uk-navbar-dropdown { + --uk-position-offset: 15px; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 15px; + --uk-inverse: dark; + /* 1 */ + width: 200px; + /* 2 */ + padding: 25px; + background: #fff; + color: #666; + box-shadow: 0 5px 12px rgba(0, 0, 0, 0.15); +} +/* + * Remove margin from the last-child + */ +.uk-navbar-dropdown > :last-child { + margin-bottom: 0; +} +.uk-navbar-dropdown :focus-visible { + outline-color: #333 !important; +} +/* + * Grid + * Adopts `uk-grid` + */ +/* Gutter Horizontal */ +.uk-navbar-dropdown .uk-drop-grid { + margin-right: -30px; +} +.uk-navbar-dropdown .uk-drop-grid > * { + padding-right: 30px; +} +/* Gutter Vertical */ +.uk-navbar-dropdown .uk-drop-grid > .uk-grid-margin { + margin-top: 30px; +} +/* + * Width modifier + */ +.uk-navbar-dropdown-width-2:not(.uk-drop-stack) { + width: 400px; +} +.uk-navbar-dropdown-width-3:not(.uk-drop-stack) { + width: 600px; +} +.uk-navbar-dropdown-width-4:not(.uk-drop-stack) { + width: 800px; +} +.uk-navbar-dropdown-width-5:not(.uk-drop-stack) { + width: 1000px; +} +/* + * Size modifier + */ +.uk-navbar-dropdown-large { + --uk-position-shift-offset: 0; + padding: 40px; +} +/* + * Dropbar modifier + * 1. Reset dropdown width to prevent to early shifting + * 2. Reset style + * 3. Padding + */ +.uk-navbar-dropdown-dropbar { + /* 1 */ + width: auto; + /* 2 */ + background: transparent; + /* 3 */ + padding: 25px 0 25px 0; + --uk-position-offset: 0; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 15px; + box-shadow: none; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-navbar-dropdown-dropbar { + --uk-position-viewport-offset: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-dropdown-dropbar { + --uk-position-viewport-offset: 40px; + } +} +.uk-navbar-dropdown-dropbar-large { + --uk-position-shift-offset: 0; + padding-top: 40px; + padding-bottom: 40px; +} +/* Dropdown Nav + * Adopts `uk-nav` + ========================================================================== */ +.uk-navbar-dropdown-nav { + font-size: 0.875rem; +} +/* + * Items + */ +.uk-navbar-dropdown-nav > li > a { + color: #999; +} +/* Hover */ +.uk-navbar-dropdown-nav > li > a:hover { + color: #666; +} +/* Active */ +.uk-navbar-dropdown-nav > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-navbar-dropdown-nav .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-navbar-dropdown-nav .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-navbar-dropdown-nav .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-navbar-dropdown-nav .uk-nav-sub a { + color: #999; +} +.uk-navbar-dropdown-nav .uk-nav-sub a:hover { + color: #666; +} +.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Dropbar + ========================================================================== */ +/* + * Adopts `uk-dropnav-dropbar` + */ +.uk-navbar-container { + transition: 0.1s ease-in-out; + transition-property: background-color; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-right, + .uk-navbar-left, + [class*="uk-navbar-center"] { + gap: 30px; + } + .uk-navbar-center-right { + left: calc(100% + 30px); + } + .uk-navbar-center-left { + right: calc(100% + 30px); + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-nav { + gap: 30px; + } +} +/* ======================================================================== + Component: Subnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Center items vertically if they have a different height + * 3. Gutter + * 4. Reset list + */ +.uk-subnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + align-items: center; + /* 3 */ + margin-right: -20px; + /* 4 */ + padding: 0; + list-style: none; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-subnav > * { + /* 1 */ + flex: none; + /* 2 */ + padding-right: 20px; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * Using `:first-child` instead of `a` to support `span` elements for text + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Style + */ +.uk-subnav > * > :first-child { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + color: #999; + font-size: 0.875rem; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-subnav > * > a:hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-subnav > .uk-active > a { + color: #333; +} +/* Divider modifier + ========================================================================== */ +/* + * Set gutter + */ +.uk-subnav-divider { + margin-right: -41px; +} +/* + * Align items and divider vertically + */ +.uk-subnav-divider > * { + display: flex; + align-items: center; +} +/* + * Divider + * 1. `nth-child` makes it also work without JS if it's only one row + */ +.uk-subnav-divider > ::before { + content: ""; + height: 1.5em; + margin-right: 0px; + margin-left: 20px; + border-right: 1px solid transparent; +} +/* 1 */ +.uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before { + border-right-color: #e5e5e5; +} +/* Pill modifier + ========================================================================== */ +/* + * Gutter + */ +.uk-subnav-pill { + margin-right: -20px; +} +.uk-subnav-pill > * { + padding-right: 20px; +} +.uk-subnav-pill > * > :first-child { + padding: 5px 10px; + background: transparent; + color: #999; +} +/* Hover */ +.uk-subnav-pill > * > a:hover { + background-color: #f8f8f8; + color: #666; +} +/* OnClick */ +.uk-subnav-pill > * > a:active { + background-color: #f8f8f8; + color: #666; +} +/* Active */ +.uk-subnav-pill > .uk-active > a { + background-color: #1e87f0; + color: #fff; +} +/* Disabled + * The same for all style modifiers + ========================================================================== */ +.uk-subnav > .uk-disabled > a { + color: #999; +} +/* ======================================================================== + Component: Breadcrumb + ========================================================================== */ +/* + * 1. Reset list + * 2. Remove space between elements + */ +.uk-breadcrumb { + /* 1 */ + padding: 0; + list-style: none; + /* 2 */ + font-size: 0; +} +/* + * 1. Doesn't generate any box and replaced by child boxes + */ +.uk-breadcrumb > * { + display: contents; +} +/* Items + ========================================================================== */ +.uk-breadcrumb > * > * { + font-size: 0.875rem; + color: #999; +} +/* Hover */ +.uk-breadcrumb > * > :hover { + color: #666; + text-decoration: none; +} +/* Disabled */ +/* Active */ +.uk-breadcrumb > :last-child > span, +.uk-breadcrumb > :last-child > a:not([href]) { + color: #666; +} +/* + * Divider + * `nth-child` makes it also work without JS if it's only one row + * 1. Remove space between inline block elements. + * 2. Style + */ +.uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before { + content: "/"; + display: inline-block; + /* 1 */ + margin: 0 20px; + /* 2 */ + font-size: 0.875rem; + color: #999; +} +/* ======================================================================== + Component: Pagination + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Center items vertically if they have a different height + * 3. Gutter + * 4. Reset list + */ +.uk-pagination { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + align-items: center; + /* 3 */ + margin-right: 0; + /* 4 */ + padding: 0; + list-style: none; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-pagination > * { + /* 1 */ + flex: none; + /* 2 */ + padding-right: 0; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Style + */ +.uk-pagination > * > * { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + padding: 5px 10px; + color: #999; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-pagination > * > :hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-pagination > .uk-active > * { + color: #666; +} +/* Disabled */ +.uk-pagination > .uk-disabled > * { + color: #999; +} +/* ======================================================================== + Component: Tab + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Gutter + * 3. Reset list + */ +.uk-tab { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin-right: -20px; + /* 3 */ + padding: 0; + list-style: none; + position: relative; +} +.uk-tab::before { + content: ""; + position: absolute; + bottom: 0; + right: 20px; + left: 0; + border-bottom: 1px solid #e5e5e5; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-tab > * { + /* 1 */ + flex: none; + /* 2 */ + padding-right: 20px; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Center content if a width is set + * 4. Style + */ +.uk-tab > * > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + justify-content: center; + /* 4 */ + padding: 5px 10px; + color: #999; + border-bottom: 1px solid transparent; + font-size: 0.875rem; + text-transform: uppercase; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-tab > * > a:hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-tab > .uk-active > a { + color: #333; + border-color: #1e87f0; +} +/* Disabled */ +.uk-tab > .uk-disabled > a { + color: #999; +} +/* Position modifier + ========================================================================== */ +/* + * Bottom + */ +.uk-tab-bottom::before { + top: 0; + bottom: auto; +} +.uk-tab-bottom > * > a { + border-top: 1px solid transparent; + border-bottom: none; +} +/* + * Left + Right + * 1. Reset Gutter + */ +.uk-tab-right, +.uk-tab-left { + flex-direction: column; + /* 1 */ + margin-right: 0; +} +/* 1 */ +.uk-tab-right > *, +.uk-tab-left > * { + padding-right: 0; +} +.uk-tab-right::before { + top: 0; + bottom: 0; + right: auto; + left: 0; + border-right: 1px solid #e5e5e5; + border-bottom: none; +} +.uk-tab-left::before { + top: 0; + bottom: 0; + right: 0; + left: auto; + border-right: 1px solid #e5e5e5; + border-bottom: none; +} +.uk-tab-right > * > a { + justify-content: right; + border-left: 1px solid transparent; + border-bottom: none; +} +.uk-tab-left > * > a { + justify-content: right; + border-right: 1px solid transparent; + border-bottom: none; +} +.uk-tab .uk-dropdown { + margin-right: 30px; +} +/* ======================================================================== + Component: Slidenav + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-slidenav { + padding: 5px 10px; + color: rgba(102, 102, 102, 0.5); + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-slidenav:hover { + color: rgba(102, 102, 102, 0.9); +} +/* OnClick */ +.uk-slidenav:active { + color: rgba(102, 102, 102, 0.5); +} +/* Icon modifier + ========================================================================== */ +/* + * Previous + */ +/* + * Next + */ +/* Size modifier + ========================================================================== */ +.uk-slidenav-large { + padding: 10px 10px; +} +/* Container + ========================================================================== */ +.uk-slidenav-container { + display: flex; +} +/* ======================================================================== + Component: Dotnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-dotnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-right: -12px; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + */ +.uk-dotnav > * { + /* 1 */ + flex: none; + /* 2 */ + padding-right: 12px; +} +/* Items + ========================================================================== */ +/* + * Items + * 1. Hide text if present + */ +.uk-dotnav > * > * { + display: block; + box-sizing: border-box; + width: 10px; + height: 10px; + border-radius: 50%; + background: transparent; + /* 1 */ + text-indent: 100%; + overflow: hidden; + white-space: nowrap; + border: 1px solid rgba(102, 102, 102, 0.4); + transition: 0.2s ease-in-out; + transition-property: background-color, border-color; +} +/* Hover */ +.uk-dotnav > * > :hover { + background-color: rgba(102, 102, 102, 0.6); + border-color: transparent; +} +/* OnClick */ +.uk-dotnav > * > :active { + background-color: rgba(102, 102, 102, 0.2); + border-color: transparent; +} +/* Active */ +.uk-dotnav > .uk-active > * { + background-color: rgba(102, 102, 102, 0.6); + border-color: transparent; +} +/* Modifier: 'uk-dotnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-dotnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-right: 0; + margin-top: -12px; +} +/* 2 */ +.uk-dotnav-vertical > * { + padding-right: 0; + padding-top: 12px; +} +/* ======================================================================== + Component: Dropdown + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Reset drop and let text expand the width instead of wrapping + * 2. Set a default width + * 3. Style + */ +.uk-dropdown { + --uk-position-offset: 10px; + --uk-position-viewport-offset: 15px; + --uk-inverse: dark; + /* 1 */ + width: auto; + /* 2 */ + min-width: 200px; + /* 3 */ + padding: 25px; + background: #fff; + color: #666; + box-shadow: 0 5px 12px rgba(0, 0, 0, 0.15); +} +/* + * Remove margin from the last-child + */ +.uk-dropdown > :last-child { + margin-bottom: 0; +} +.uk-dropdown :focus-visible { + outline-color: #333 !important; +} +/* Size modifier + ========================================================================== */ +.uk-dropdown-large { + padding: 40px; +} +/* Dropbar modifier + ========================================================================== */ +/* + * 1. Reset dropdown width to prevent to early shifting + * 2. Reset style + * 3. Padding + */ +.uk-dropdown-dropbar { + --uk-position-offset: 10px; + /* 1 */ + width: auto; + /* 2 */ + background: transparent; + /* 3 */ + padding: 5px 0 25px 0; + --uk-position-viewport-offset: 15px; + box-shadow: none; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-dropdown-dropbar { + --uk-position-viewport-offset: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-dropdown-dropbar { + --uk-position-viewport-offset: 40px; + } +} +.uk-dropdown-dropbar-large { + padding-top: 40px; + padding-bottom: 40px; +} +/* Nav + * Adopts `uk-nav` + ========================================================================== */ +.uk-dropdown-nav { + font-size: 0.875rem; +} +/* + * Items + */ +.uk-dropdown-nav > li > a { + color: #999; +} +/* Hover + Active */ +.uk-dropdown-nav > li > a:hover, +.uk-dropdown-nav > li.uk-active > a { + color: #666; +} +/* + * Subtitle + */ +.uk-dropdown-nav .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-dropdown-nav .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-dropdown-nav .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-dropdown-nav .uk-nav-sub a { + color: #999; +} +.uk-dropdown-nav .uk-nav-sub a:hover, +.uk-dropdown-nav .uk-nav-sub li.uk-active > a { + color: #666; +} +/* ======================================================================== + Component: Lightbox + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Allow scrolling for the modal dialog + * 4. Horizontal padding + * 5. Mask the background page + * 6. Fade-in transition + * 7. Prevent cancellation of pointer events while dragging + */ +.uk-lightbox { + --uk-inverse: light; + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + z-index: 1010; + /* 5 */ + background: #000; + /* 6 */ + opacity: 0; + transition: opacity 0.15s linear; + /* 7 */ + touch-action: pinch-zoom; +} +/* + * Open + * 1. Center child + * 2. Fade-in + */ +.uk-lightbox.uk-open { + display: block; + /* 2 */ + opacity: 1; +} +/* + * Focus + */ +.uk-lightbox :focus-visible { + outline-color: rgba(255, 255, 255, 0.7); +} +/* Page + ========================================================================== */ +/* + * Prevent scrollbars + */ +.uk-lightbox-page { + overflow: hidden; +} +/* Items + ========================================================================== */ +/* + * Reset list + */ +.uk-lightbox-items { + margin: 0; + padding: 0; + list-style: none; +} +/* + * 1. Center child within the viewport + * 2. Not visible by default + * 3. Optimize animation + * 4. Responsiveness + * Using `vh` for `max-height` to fix image proportions after resize in Safari and Opera + */ +.uk-lightbox-items > * { + /* 1 */ + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + /* 2 */ + display: none; + justify-content: center; + align-items: flex-start; + /* 3 */ + will-change: transform, opacity; + /* 4 */ + overflow: auto; +} +/* 2 */ +.uk-lightbox-items > .uk-active { + display: flex; +} +.uk-lightbox-items-fit > * { + align-items: center; +} +/* 4 */ +.uk-lightbox-items-fit > * > * { + max-width: 100vw; + max-height: 100vh; +} +.uk-lightbox-items-fit > * > :not(iframe) { + width: auto; + height: auto; +} +/* Zoom Cursor */ +.uk-lightbox-items.uk-lightbox-items-fit .uk-lightbox-zoom:hover { + cursor: zoom-in; +} +.uk-lightbox-items:not(.uk-lightbox-items-fit) .uk-lightbox-zoom:hover { + cursor: zoom-out; +} +/* Navs + ========================================================================== */ +.uk-lightbox-thumbnav-vertical :where(img, video) { + max-width: 100px; +} +.uk-lightbox-thumbnav:not(.uk-lightbox-thumbnav-vertical) :where(img, video) { + max-height: 100px; +} +.uk-lightbox-thumbnav:empty, +.uk-lightbox-dotnav:empty { + display: none; +} +/* Caption + ========================================================================== */ +.uk-lightbox-caption:empty { + display: none; +} +.uk-lightbox-caption { + padding: 10px 10px; + background: rgba(0, 0, 0, 0.3); + color: rgba(255, 255, 255, 0.7); +} +.uk-lightbox-caption > * { + color: rgba(255, 255, 255, 0.7); +} +/* Counter + ========================================================================== */ +.uk-lightbox-counter:empty { + display: none; +} +/* Iframe + ========================================================================== */ +.uk-lightbox-iframe { + width: 80%; + height: 80%; +} +/* ======================================================================== + Component: Animation + ========================================================================== */ +[class*="uk-animation-"] { + animation: 0.5s ease-out both; +} +/* Animations + ========================================================================== */ +/* + * Fade + */ +.uk-animation-fade { + animation-name: uk-fade; + animation-duration: 0.8s; + animation-timing-function: linear; +} +/* + * Scale + */ +.uk-animation-scale-up { + animation-name: uk-fade, uk-scale-up; +} +.uk-animation-scale-down { + animation-name: uk-fade, uk-scale-down; +} +/* + * Slide + */ +.uk-animation-slide-top { + animation-name: uk-fade, uk-slide-top; +} +.uk-animation-slide-bottom { + animation-name: uk-fade, uk-slide-bottom; +} +.uk-animation-slide-right { + animation-name: uk-fade, uk-slide-left; +} +.uk-animation-slide-left { + animation-name: uk-fade, uk-slide-right; +} +/* + * Slide Small + */ +.uk-animation-slide-top-small { + animation-name: uk-fade, uk-slide-top-small; +} +.uk-animation-slide-bottom-small { + animation-name: uk-fade, uk-slide-bottom-small; +} +.uk-animation-slide-right-small { + animation-name: uk-fade, uk-slide-left-small; +} +.uk-animation-slide-left-small { + animation-name: uk-fade, uk-slide-right-small; +} +/* + * Slide Medium + */ +.uk-animation-slide-top-medium { + animation-name: uk-fade, uk-slide-top-medium; +} +.uk-animation-slide-bottom-medium { + animation-name: uk-fade, uk-slide-bottom-medium; +} +.uk-animation-slide-right-medium { + animation-name: uk-fade, uk-slide-left-medium; +} +.uk-animation-slide-left-medium { + animation-name: uk-fade, uk-slide-right-medium; +} +/* + * Kenburns + */ +.uk-animation-kenburns { + animation-name: uk-kenburns; + animation-duration: 15s; +} +/* + * Shake + */ +.uk-animation-shake { + animation-name: uk-shake; +} +/* + * SVG Stroke + * The `--uk-animation-stroke` custom property contains the longest path length. + * Set it manually or use `uk-svg="stroke-animation: true"` to set it automatically. + * All strokes are animated by the same pace and doesn't end simultaneously. + * To end simultaneously, `pathLength="1"` could be used, but it's not working in Safari yet. + */ +.uk-animation-stroke { + animation-name: uk-stroke; + animation-duration: 2s; + stroke-dasharray: var(--uk-animation-stroke); +} +/* Direction modifier + ========================================================================== */ +.uk-animation-reverse { + animation-direction: reverse; + animation-timing-function: ease-in; +} +/* Duration modifier + ========================================================================== */ +.uk-animation-fast { + animation-duration: 0.1s; +} +/* Toggle animation based on the State of the Parent Element + ========================================================================== */ +.uk-animation-toggle:not(:hover):not(:focus) [class*="uk-animation-"] { + animation-name: none; +} +/* Keyframes used by animation classes + ========================================================================== */ +/* + * Fade + */ +@keyframes uk-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +/* + * Scale + */ +@keyframes uk-scale-up { + 0% { + transform: scale(0.9); + } + 100% { + transform: scale(1); + } +} +@keyframes uk-scale-down { + 0% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} +/* + * Slide + */ +@keyframes uk-slide-top { + 0% { + transform: translateY(-100%); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom { + 0% { + transform: translateY(100%); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(0); + } +} +/* + * Slide Small + */ +@keyframes uk-slide-top-small { + 0% { + transform: translateY(-10px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom-small { + 0% { + transform: translateY(10px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left-small { + 0% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right-small { + 0% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} +/* + * Slide Medium + */ +@keyframes uk-slide-top-medium { + 0% { + transform: translateY(-50px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom-medium { + 0% { + transform: translateY(50px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left-medium { + 0% { + transform: translateX(50px); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right-medium { + 0% { + transform: translateX(-50px); + } + 100% { + transform: translateX(0); + } +} +/* + * Kenburns + */ +@keyframes uk-kenburns { + 0% { + transform: scale(1); + } + 100% { + transform: scale(1.2); + } +} +/* + * Shake + */ +@keyframes uk-shake { + 0%, + 100% { + transform: translateX(0); + } + 10% { + transform: translateX(9px); + } + 20% { + transform: translateX(-8px); + } + 30% { + transform: translateX(7px); + } + 40% { + transform: translateX(-6px); + } + 50% { + transform: translateX(5px); + } + 60% { + transform: translateX(-4px); + } + 70% { + transform: translateX(3px); + } + 80% { + transform: translateX(-2px); + } + 90% { + transform: translateX(1px); + } +} +/* + * Stroke + */ +@keyframes uk-stroke { + 0% { + stroke-dashoffset: var(--uk-animation-stroke); + } + 100% { + stroke-dashoffset: 0; + } +} +/* ======================================================================== + Component: Width + ========================================================================== */ +/* Equal child widths + ========================================================================== */ +[class*="uk-child-width"] > * { + box-sizing: border-box; + width: 100%; +} +.uk-child-width-1-2 > * { + width: 50%; +} +.uk-child-width-1-3 > * { + width: calc(100% / 3); +} +.uk-child-width-1-4 > * { + width: 25%; +} +.uk-child-width-1-5 > * { + width: 20%; +} +.uk-child-width-1-6 > * { + width: calc(100% / 6); +} +.uk-child-width-auto > * { + width: auto; +} +/* + * 1. Reset the `min-width`, which is set to auto by default, because + * flex items won't shrink below their minimum intrinsic content size. + * Using `1px` instead of `0`, so items still wrap into the next line, + * if they have zero width and padding and the predecessor is 100% wide. + */ +.uk-child-width-expand > :not([class*="uk-width"]) { + flex: 1; + /* 1 */ + min-width: 1px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-child-width-1-1\@s > * { + width: 100%; + } + .uk-child-width-1-2\@s > * { + width: 50%; + } + .uk-child-width-1-3\@s > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@s > * { + width: 25%; + } + .uk-child-width-1-5\@s > * { + width: 20%; + } + .uk-child-width-1-6\@s > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@s > * { + width: auto; + } + .uk-child-width-expand\@s > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@s > :not([class*="uk-width"]), + .uk-child-width-1-2\@s > :not([class*="uk-width"]), + .uk-child-width-1-3\@s > :not([class*="uk-width"]), + .uk-child-width-1-4\@s > :not([class*="uk-width"]), + .uk-child-width-1-5\@s > :not([class*="uk-width"]), + .uk-child-width-1-6\@s > :not([class*="uk-width"]), + .uk-child-width-auto\@s > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-child-width-1-1\@m > * { + width: 100%; + } + .uk-child-width-1-2\@m > * { + width: 50%; + } + .uk-child-width-1-3\@m > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@m > * { + width: 25%; + } + .uk-child-width-1-5\@m > * { + width: 20%; + } + .uk-child-width-1-6\@m > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@m > * { + width: auto; + } + .uk-child-width-expand\@m > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@m > :not([class*="uk-width"]), + .uk-child-width-1-2\@m > :not([class*="uk-width"]), + .uk-child-width-1-3\@m > :not([class*="uk-width"]), + .uk-child-width-1-4\@m > :not([class*="uk-width"]), + .uk-child-width-1-5\@m > :not([class*="uk-width"]), + .uk-child-width-1-6\@m > :not([class*="uk-width"]), + .uk-child-width-auto\@m > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-child-width-1-1\@l > * { + width: 100%; + } + .uk-child-width-1-2\@l > * { + width: 50%; + } + .uk-child-width-1-3\@l > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@l > * { + width: 25%; + } + .uk-child-width-1-5\@l > * { + width: 20%; + } + .uk-child-width-1-6\@l > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@l > * { + width: auto; + } + .uk-child-width-expand\@l > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@l > :not([class*="uk-width"]), + .uk-child-width-1-2\@l > :not([class*="uk-width"]), + .uk-child-width-1-3\@l > :not([class*="uk-width"]), + .uk-child-width-1-4\@l > :not([class*="uk-width"]), + .uk-child-width-1-5\@l > :not([class*="uk-width"]), + .uk-child-width-1-6\@l > :not([class*="uk-width"]), + .uk-child-width-auto\@l > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-child-width-1-1\@xl > * { + width: 100%; + } + .uk-child-width-1-2\@xl > * { + width: 50%; + } + .uk-child-width-1-3\@xl > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@xl > * { + width: 25%; + } + .uk-child-width-1-5\@xl > * { + width: 20%; + } + .uk-child-width-1-6\@xl > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@xl > * { + width: auto; + } + .uk-child-width-expand\@xl > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@xl > :not([class*="uk-width"]), + .uk-child-width-1-2\@xl > :not([class*="uk-width"]), + .uk-child-width-1-3\@xl > :not([class*="uk-width"]), + .uk-child-width-1-4\@xl > :not([class*="uk-width"]), + .uk-child-width-1-5\@xl > :not([class*="uk-width"]), + .uk-child-width-1-6\@xl > :not([class*="uk-width"]), + .uk-child-width-auto\@xl > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Single Widths + ========================================================================== */ +/* + * 1. `max-width` is needed for the pixel-based classes + */ +[class*="uk-width"] { + box-sizing: border-box; + width: 100%; + /* 1 */ + max-width: 100%; +} +/* Halves */ +.uk-width-1-2 { + width: 50%; +} +/* Thirds */ +.uk-width-1-3 { + width: calc(100% / 3); +} +.uk-width-2-3 { + width: calc(200% / 3); +} +/* Quarters */ +.uk-width-1-4 { + width: 25%; +} +.uk-width-3-4 { + width: 75%; +} +/* Fifths */ +.uk-width-1-5 { + width: 20%; +} +.uk-width-2-5 { + width: 40%; +} +.uk-width-3-5 { + width: 60%; +} +.uk-width-4-5 { + width: 80%; +} +/* Sixths */ +.uk-width-1-6 { + width: calc(100% / 6); +} +.uk-width-5-6 { + width: calc(500% / 6); +} +/* Pixel */ +.uk-width-small { + width: 150px; +} +.uk-width-medium { + width: 300px; +} +.uk-width-large { + width: 450px; +} +.uk-width-xlarge { + width: 600px; +} +.uk-width-2xlarge { + width: 750px; +} +/* Auto */ +.uk-width-auto { + width: auto; +} +/* Expand */ +.uk-width-expand { + flex: 1; + min-width: 1px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + /* Whole */ + .uk-width-1-1\@s { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@s { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@s { + width: calc(100% / 3); + } + .uk-width-2-3\@s { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@s { + width: 25%; + } + .uk-width-3-4\@s { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@s { + width: 20%; + } + .uk-width-2-5\@s { + width: 40%; + } + .uk-width-3-5\@s { + width: 60%; + } + .uk-width-4-5\@s { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@s { + width: calc(100% / 6); + } + .uk-width-5-6\@s { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@s { + width: 150px; + } + .uk-width-medium\@s { + width: 300px; + } + .uk-width-large\@s { + width: 450px; + } + .uk-width-xlarge\@s { + width: 600px; + } + .uk-width-2xlarge\@s { + width: 750px; + } + /* Auto */ + .uk-width-auto\@s { + width: auto; + } + /* Expand */ + .uk-width-expand\@s { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@s, + .uk-width-1-2\@s, + .uk-width-1-3\@s, + .uk-width-2-3\@s, + .uk-width-1-4\@s, + .uk-width-3-4\@s, + .uk-width-1-5\@s, + .uk-width-2-5\@s, + .uk-width-3-5\@s, + .uk-width-4-5\@s, + .uk-width-1-6\@s, + .uk-width-5-6\@s, + .uk-width-small\@s, + .uk-width-medium\@s, + .uk-width-large\@s, + .uk-width-xlarge\@s, + .uk-width-2xlarge\@s, + .uk-width-auto\@s { + flex: initial; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + /* Whole */ + .uk-width-1-1\@m { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@m { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@m { + width: calc(100% / 3); + } + .uk-width-2-3\@m { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@m { + width: 25%; + } + .uk-width-3-4\@m { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@m { + width: 20%; + } + .uk-width-2-5\@m { + width: 40%; + } + .uk-width-3-5\@m { + width: 60%; + } + .uk-width-4-5\@m { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@m { + width: calc(100% / 6); + } + .uk-width-5-6\@m { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@m { + width: 150px; + } + .uk-width-medium\@m { + width: 300px; + } + .uk-width-large\@m { + width: 450px; + } + .uk-width-xlarge\@m { + width: 600px; + } + .uk-width-2xlarge\@m { + width: 750px; + } + /* Auto */ + .uk-width-auto\@m { + width: auto; + } + /* Expand */ + .uk-width-expand\@m { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@m, + .uk-width-1-2\@m, + .uk-width-1-3\@m, + .uk-width-2-3\@m, + .uk-width-1-4\@m, + .uk-width-3-4\@m, + .uk-width-1-5\@m, + .uk-width-2-5\@m, + .uk-width-3-5\@m, + .uk-width-4-5\@m, + .uk-width-1-6\@m, + .uk-width-5-6\@m, + .uk-width-small\@m, + .uk-width-medium\@m, + .uk-width-large\@m, + .uk-width-xlarge\@m, + .uk-width-2xlarge\@m, + .uk-width-auto\@m { + flex: initial; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Whole */ + .uk-width-1-1\@l { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@l { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@l { + width: calc(100% / 3); + } + .uk-width-2-3\@l { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@l { + width: 25%; + } + .uk-width-3-4\@l { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@l { + width: 20%; + } + .uk-width-2-5\@l { + width: 40%; + } + .uk-width-3-5\@l { + width: 60%; + } + .uk-width-4-5\@l { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@l { + width: calc(100% / 6); + } + .uk-width-5-6\@l { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@l { + width: 150px; + } + .uk-width-medium\@l { + width: 300px; + } + .uk-width-large\@l { + width: 450px; + } + .uk-width-xlarge\@l { + width: 600px; + } + .uk-width-2xlarge\@l { + width: 750px; + } + /* Auto */ + .uk-width-auto\@l { + width: auto; + } + /* Expand */ + .uk-width-expand\@l { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@l, + .uk-width-1-2\@l, + .uk-width-1-3\@l, + .uk-width-2-3\@l, + .uk-width-1-4\@l, + .uk-width-3-4\@l, + .uk-width-1-5\@l, + .uk-width-2-5\@l, + .uk-width-3-5\@l, + .uk-width-4-5\@l, + .uk-width-1-6\@l, + .uk-width-5-6\@l, + .uk-width-small\@l, + .uk-width-medium\@l, + .uk-width-large\@l, + .uk-width-xlarge\@l, + .uk-width-2xlarge\@l, + .uk-width-auto\@l { + flex: initial; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + /* Whole */ + .uk-width-1-1\@xl { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@xl { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@xl { + width: calc(100% / 3); + } + .uk-width-2-3\@xl { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@xl { + width: 25%; + } + .uk-width-3-4\@xl { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@xl { + width: 20%; + } + .uk-width-2-5\@xl { + width: 40%; + } + .uk-width-3-5\@xl { + width: 60%; + } + .uk-width-4-5\@xl { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@xl { + width: calc(100% / 6); + } + .uk-width-5-6\@xl { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@xl { + width: 150px; + } + .uk-width-medium\@xl { + width: 300px; + } + .uk-width-large\@xl { + width: 450px; + } + .uk-width-xlarge\@xl { + width: 600px; + } + .uk-width-2xlarge\@xl { + width: 750px; + } + /* Auto */ + .uk-width-auto\@xl { + width: auto; + } + /* Expand */ + .uk-width-expand\@xl { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@xl, + .uk-width-1-2\@xl, + .uk-width-1-3\@xl, + .uk-width-2-3\@xl, + .uk-width-1-4\@xl, + .uk-width-3-4\@xl, + .uk-width-1-5\@xl, + .uk-width-2-5\@xl, + .uk-width-3-5\@xl, + .uk-width-4-5\@xl, + .uk-width-1-6\@xl, + .uk-width-5-6\@xl, + .uk-width-small\@xl, + .uk-width-medium\@xl, + .uk-width-large\@xl, + .uk-width-xlarge\@xl, + .uk-width-2xlarge\@xl, + .uk-width-auto\@xl { + flex: initial; + } +} +/* Intrinsic Widths + ========================================================================== */ +.uk-width-max-content { + width: max-content; +} +.uk-width-min-content { + width: min-content; +} +/* ======================================================================== + Component: Height + ========================================================================== */ +[class*="uk-height"] { + box-sizing: border-box; +} +/* + * Only works if parent element has a height set + */ +.uk-height-1-1 { + height: 100%; +} +/* + * Useful to create image teasers + */ +.uk-height-viewport { + min-height: 100vh; +} +.uk-height-viewport-2 { + min-height: 200vh; +} +.uk-height-viewport-3 { + min-height: 300vh; +} +.uk-height-viewport-4 { + min-height: 400vh; +} +/* + * Pixel + * Useful for `overflow: auto` + */ +.uk-height-small { + height: 150px; +} +.uk-height-medium { + height: 300px; +} +.uk-height-large { + height: 450px; +} +.uk-height-max-small { + max-height: 150px; +} +.uk-height-max-medium { + max-height: 300px; +} +.uk-height-max-large { + max-height: 450px; +} +/* ======================================================================== + Component: Text + ========================================================================== */ +/* Style modifiers + ========================================================================== */ +.uk-text-lead { + font-size: 1.5rem; + line-height: 1.5; + color: #333; +} +.uk-text-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +.uk-text-meta > a { + color: #999; +} +.uk-text-meta > a:hover { + color: #666; + text-decoration: none; +} +/* Size modifiers + ========================================================================== */ +.uk-text-small { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-text-large { + font-size: 1.5rem; + line-height: 1.5; +} +.uk-text-default { + font-size: 16px; + line-height: 1.5; +} +/* Weight modifier + ========================================================================== */ +.uk-text-light { + font-weight: 300; +} +.uk-text-normal { + font-weight: 400; +} +.uk-text-bold { + font-weight: 700; +} +.uk-text-lighter { + font-weight: lighter; +} +.uk-text-bolder { + font-weight: bolder; +} +/* Style modifier + ========================================================================== */ +.uk-text-italic { + font-style: italic; +} +/* Transform modifier + ========================================================================== */ +.uk-text-capitalize { + text-transform: capitalize !important; +} +.uk-text-uppercase { + text-transform: uppercase !important; +} +.uk-text-lowercase { + text-transform: lowercase !important; +} +/* Decoration modifier + ========================================================================== */ +.uk-text-decoration-none { + text-decoration: none !important; +} +/* Color modifiers + ========================================================================== */ +.uk-text-muted { + color: #999 !important; +} +.uk-text-emphasis { + color: #333 !important; +} +.uk-text-primary { + color: #1e87f0 !important; +} +.uk-text-secondary { + color: #222 !important; +} +.uk-text-success { + color: #32d296 !important; +} +.uk-text-warning { + color: #faa05a !important; +} +.uk-text-danger { + color: #f0506e !important; +} +/* Background modifier + ========================================================================== */ +/* + * 1. The background clips to the foreground text. Works in all browsers. + * 2. Default color is set to transparent. + * 3. Container fits the text + * 4. Style + */ +.uk-text-background { + /* 1 */ + -webkit-background-clip: text; + /* 2 */ + color: transparent !important; + /* 3 */ + display: inline-block; + /* 4 */ + background-color: #1e87f0; + background-image: linear-gradient(-90deg, #1e87f0 0%, #411ef0 100%); +} +/* Alignment modifiers + ========================================================================== */ +.uk-text-right { + text-align: right !important; +} +.uk-text-left { + text-align: left !important; +} +.uk-text-center { + text-align: center !important; +} +.uk-text-justify { + text-align: justify !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-text-right\@s { + text-align: right !important; + } + .uk-text-left\@s { + text-align: left !important; + } + .uk-text-center\@s { + text-align: center !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-text-right\@m { + text-align: right !important; + } + .uk-text-left\@m { + text-align: left !important; + } + .uk-text-center\@m { + text-align: center !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-text-right\@l { + text-align: right !important; + } + .uk-text-left\@l { + text-align: left !important; + } + .uk-text-center\@l { + text-align: center !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-text-right\@xl { + text-align: right !important; + } + .uk-text-left\@xl { + text-align: left !important; + } + .uk-text-center\@xl { + text-align: center !important; + } +} +/* + * Vertical + */ +.uk-text-top { + vertical-align: top !important; +} +.uk-text-middle { + vertical-align: middle !important; +} +.uk-text-bottom { + vertical-align: bottom !important; +} +.uk-text-baseline { + vertical-align: baseline !important; +} +/* Wrap modifiers + ========================================================================== */ +/* + * Prevent text from wrapping onto multiple lines + */ +.uk-text-nowrap { + white-space: nowrap; +} +/* + * 1. Make sure a max-width is set after which truncation can occur + * 2. Prevent text from wrapping onto multiple lines, and truncate with an ellipsis + * 3. Fix for table cells + */ +.uk-text-truncate { + /* 1 */ + max-width: 100%; + /* 2 */ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* 2 */ +th.uk-text-truncate, +td.uk-text-truncate { + max-width: 0; +} +/* + * Wrap long words onto the next line and break them if they are too long to fit. + * 1. Make it work with table cells in all browsers. + * Note: Not using `hyphens: auto` because it hyphenates text even if not needed. + */ +.uk-text-break { + overflow-wrap: break-word; +} +/* 1 */ +th.uk-text-break, +td.uk-text-break { + word-break: break-word; +} +/* Stroke modifiers + ========================================================================== */ +.uk-text-stroke { + -webkit-text-stroke: calc(1.4px + 0.002em); + -webkit-text-fill-color: transparent; +} +/* ======================================================================== + Component: Column + ========================================================================== */ +[class*="uk-column-"] { + column-gap: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + [class*="uk-column-"] { + column-gap: 40px; + } +} +/* + * Fix image 1px line wrapping into the next column in Chrome + */ +[class*="uk-column-"] img { + transform: translate3d(0, 0, 0); +} +/* Divider + ========================================================================== */ +/* + * 1. Double the column gap + */ +.uk-column-divider { + column-rule: 1px solid #e5e5e5; + /* 1 */ + column-gap: 60px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-column-divider { + column-gap: 80px; + } +} +/* Width modifiers + ========================================================================== */ +.uk-column-1-2 { + column-count: 2; +} +.uk-column-1-3 { + column-count: 3; +} +.uk-column-1-4 { + column-count: 4; +} +.uk-column-1-5 { + column-count: 5; +} +.uk-column-1-6 { + column-count: 6; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-column-1-2\@s { + column-count: 2; + } + .uk-column-1-3\@s { + column-count: 3; + } + .uk-column-1-4\@s { + column-count: 4; + } + .uk-column-1-5\@s { + column-count: 5; + } + .uk-column-1-6\@s { + column-count: 6; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-column-1-2\@m { + column-count: 2; + } + .uk-column-1-3\@m { + column-count: 3; + } + .uk-column-1-4\@m { + column-count: 4; + } + .uk-column-1-5\@m { + column-count: 5; + } + .uk-column-1-6\@m { + column-count: 6; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-column-1-2\@l { + column-count: 2; + } + .uk-column-1-3\@l { + column-count: 3; + } + .uk-column-1-4\@l { + column-count: 4; + } + .uk-column-1-5\@l { + column-count: 5; + } + .uk-column-1-6\@l { + column-count: 6; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-column-1-2\@xl { + column-count: 2; + } + .uk-column-1-3\@xl { + column-count: 3; + } + .uk-column-1-4\@xl { + column-count: 4; + } + .uk-column-1-5\@xl { + column-count: 5; + } + .uk-column-1-6\@xl { + column-count: 6; + } +} +/* Make element span across all columns + * Does not work in Firefox yet + ========================================================================== */ +.uk-column-span { + column-span: all; +} +/* ======================================================================== + Component: Cover + ========================================================================== */ +/* + * Works with iframes and embedded content + * 1. Use attribute to apply transform instantly. Needed if transform is transitioned. + * 2. Reset responsiveness for embedded content + * 3. Center object + * Note: Percent values on the `top` property only works if this element + * is absolute positioned or if the container has a height + */ +/* 1 */ +[uk-cover]:where(canvas, iframe, svg), +[data-uk-cover]:where(canvas, iframe, svg) { + /* 2 */ + max-width: none; + /* 3 */ + position: absolute; + right: 50%; + top: 50%; + --uk-position-translate-x: 50%; + --uk-position-translate-y: -50%; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)); +} +iframe[uk-cover], +iframe[data-uk-cover] { + pointer-events: none; +} +[uk-cover]:where(img, video), +[data-uk-cover]:where(img, video) { + /* 3 */ + position: absolute; + top: 0; + right: 0; + width: 100%; + height: 100%; + box-sizing: border-box; + object-fit: cover; + object-position: center; +} +/* Container + ========================================================================== */ +/* + * 1. Parent container which clips resized object + * 2. Needed if the child is positioned absolute. See note above + */ +.uk-cover-container { + /* 1 */ + overflow: hidden; + /* 2 */ + position: relative; +} +/* ======================================================================== + Component: Background + ========================================================================== */ +/* Color + ========================================================================== */ +.uk-background-default { + background-color: #fff; +} +.uk-background-muted { + background-color: #f8f8f8; +} +.uk-background-primary { + background-color: #1e87f0; +} +.uk-background-secondary { + background-color: #222; +} +/* Size + ========================================================================== */ +.uk-background-cover, +.uk-background-contain, +.uk-background-width-1-1, +.uk-background-height-1-1 { + background-position: 50% 50%; + background-repeat: no-repeat; +} +.uk-background-cover { + background-size: cover; +} +.uk-background-contain { + background-size: contain; +} +.uk-background-width-1-1 { + background-size: 100%; +} +.uk-background-height-1-1 { + background-size: auto 100%; +} +/* Position + ========================================================================== */ +.uk-background-top-right { + background-position: 100% 0; +} +.uk-background-top-center { + background-position: 50% 0; +} +.uk-background-top-left { + background-position: 0% 0; +} +.uk-background-center-right { + background-position: 100% 50%; +} +.uk-background-center-center { + background-position: 50% 50%; +} +.uk-background-center-left { + background-position: 0% 50%; +} +.uk-background-bottom-right { + background-position: 100% 100%; +} +.uk-background-bottom-center { + background-position: 50% 100%; +} +.uk-background-bottom-left { + background-position: 0% 100%; +} +/* Repeat + ========================================================================== */ +.uk-background-norepeat { + background-repeat: no-repeat; +} +/* Attachment + ========================================================================== */ +.uk-background-fixed { + background-attachment: fixed; +} +/* + * Exclude touch devices because `fixed` doesn't work on iOS and Android + */ +@media (pointer: coarse) { + .uk-background-fixed { + background-attachment: scroll; + } +} +/* Image + ========================================================================== */ +/* Phone portrait and smaller */ +@media (max-width: 639px) { + .uk-background-image\@s { + background-image: none !important; + } +} +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-background-image\@m { + background-image: none !important; + } +} +/* Tablet landscape and smaller */ +@media (max-width: 1199px) { + .uk-background-image\@l { + background-image: none !important; + } +} +/* Desktop and smaller */ +@media (max-width: 1599px) { + .uk-background-image\@xl { + background-image: none !important; + } +} +/* Blend modes + ========================================================================== */ +.uk-background-blend-multiply { + background-blend-mode: multiply; +} +.uk-background-blend-screen { + background-blend-mode: screen; +} +.uk-background-blend-overlay { + background-blend-mode: overlay; +} +.uk-background-blend-darken { + background-blend-mode: darken; +} +.uk-background-blend-lighten { + background-blend-mode: lighten; +} +.uk-background-blend-color-dodge { + background-blend-mode: color-dodge; +} +.uk-background-blend-color-burn { + background-blend-mode: color-burn; +} +.uk-background-blend-hard-light { + background-blend-mode: hard-light; +} +.uk-background-blend-soft-light { + background-blend-mode: soft-light; +} +.uk-background-blend-difference { + background-blend-mode: difference; +} +.uk-background-blend-exclusion { + background-blend-mode: exclusion; +} +.uk-background-blend-hue { + background-blend-mode: hue; +} +.uk-background-blend-saturation { + background-blend-mode: saturation; +} +.uk-background-blend-color { + background-blend-mode: color; +} +.uk-background-blend-luminosity { + background-blend-mode: luminosity; +} +/* ======================================================================== + Component: Align + ========================================================================== */ +/* + * Default + */ +[class*="uk-align"] { + display: block; + margin-bottom: 30px; +} +* + [class*="uk-align"] { + margin-top: 30px; +} +/* + * Center + */ +.uk-align-center { + margin-right: auto; + margin-left: auto; +} +/* + * Left/Right + */ +.uk-align-right { + margin-top: 0; + margin-left: 30px; + float: right; +} +.uk-align-left { + margin-top: 0; + margin-right: 30px; + float: left; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-align-right\@s { + margin-top: 0; + margin-left: 30px; + float: right; + } + .uk-align-left\@s { + margin-top: 0; + margin-right: 30px; + float: left; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-align-right\@m { + margin-top: 0; + margin-left: 30px; + float: right; + } + .uk-align-left\@m { + margin-top: 0; + margin-right: 30px; + float: left; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-align-right\@l { + margin-top: 0; + float: right; + } + .uk-align-left\@l { + margin-top: 0; + float: left; + } + .uk-align-right, + .uk-align-right\@s, + .uk-align-right\@m, + .uk-align-right\@l { + margin-left: 40px; + } + .uk-align-left, + .uk-align-left\@s, + .uk-align-left\@m, + .uk-align-left\@l { + margin-right: 40px; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-align-right\@xl { + margin-top: 0; + margin-left: 40px; + float: right; + } + .uk-align-left\@xl { + margin-top: 0; + margin-right: 40px; + float: left; + } +} +/* ======================================================================== + Component: SVG + ========================================================================== */ +/* + * 1. Fill all SVG elements with the current text color if no `fill` attribute is set + * 2. Set the fill and stroke color of all SVG elements to the current text color + */ +/* 1 */ +.uk-svg, +.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve) { + fill: currentcolor; +} +.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve) { + stroke: currentcolor; +} +/* + * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835 + */ +.uk-svg { + transform: translate(0, 0); +} +/* ======================================================================== + Component: Utility + ========================================================================== */ +/* Panel + ========================================================================== */ +.uk-panel { + display: flow-root; + position: relative; + box-sizing: border-box; +} +/* + * Remove margin from the last-child + */ +.uk-panel > :last-child { + margin-bottom: 0; +} +/* + * Scrollable + */ +.uk-panel-scrollable { + height: 170px; + padding: 10px; + border: 1px solid #e5e5e5; + overflow: auto; + resize: both; +} +/* Clearfix + ========================================================================== */ +/* + * 1. `table-cell` is used with `::before` because `table` creates a 1px gap when it becomes a flex item, only in Webkit + * 2. `table` is used again with `::after` because `clear` only works with block elements. + * Note: `display: block` with `overflow: hidden` is currently not working in the latest Safari + */ +/* 1 */ +.uk-clearfix::before { + content: ""; + display: table-cell; +} +/* 2 */ +.uk-clearfix::after { + content: ""; + display: table; + clear: both; +} +/* Float + ========================================================================== */ +/* + * 1. Prevent content overflow + */ +.uk-float-right { + float: right; +} +.uk-float-left { + float: left; +} +/* 1 */ +[class*="uk-float-"] { + max-width: 100%; +} +/* Overflow + ========================================================================== */ +.uk-overflow-hidden { + overflow: hidden; +} +/* + * Enable scrollbars if content is clipped + */ +.uk-overflow-auto { + overflow: auto; +} +.uk-overflow-auto > :last-child { + margin-bottom: 0; +} +/* Box Sizing + ========================================================================== */ +.uk-box-sizing-content { + box-sizing: content-box; +} +.uk-box-sizing-border { + box-sizing: border-box; +} +/* Resize + ========================================================================== */ +.uk-resize { + resize: both; +} +.uk-resize-horizontal { + resize: horizontal; +} +.uk-resize-vertical { + resize: vertical; +} +/* Display + ========================================================================== */ +.uk-display-block { + display: block !important; +} +.uk-display-inline { + display: inline !important; +} +.uk-display-inline-block { + display: inline-block !important; +} +/* Inline + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Behave like most inline-block elements + * 5. Force new layer without creating a new stacking context + * to fix 1px glitch when combined with overlays and transitions in Webkit + * 6. Clip child elements + */ +[class*="uk-inline"] { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + vertical-align: middle; + /* 5 */ + -webkit-backface-visibility: hidden; +} +.uk-inline-clip { + /* 6 */ + overflow: hidden; +} +/* Responsive objects + ========================================================================== */ +/* + * Preserve original dimensions + * Because `img, `video`, `canvas` and `audio` are already responsive by default, see Base component + */ +.uk-preserve-width, +.uk-preserve-width canvas, +.uk-preserve-width img, +.uk-preserve-width svg, +.uk-preserve-width video { + max-width: none; +} +/* + * Responsiveness + * Corrects `max-width` and `max-height` behavior if padding and border are used + */ +.uk-responsive-width, +.uk-responsive-height { + box-sizing: border-box; +} +/* + * 1. Set a maximum width. `important` needed to override `uk-preserve-width img` + * 2. Auto scale the height. Only needed if `height` attribute is present + */ +.uk-responsive-width { + /* 1 */ + max-width: 100% !important; + /* 2 */ + height: auto; +} +/* + * 1. Set a maximum height. Only works if the parent element has a fixed height + * 2. Auto scale the width. Only needed if `width` attribute is present + * 3. Reset max-width, which `img, `video`, `canvas` and `audio` already have by default + */ +.uk-responsive-height { + /* 1 */ + max-height: 100%; + /* 2 */ + width: auto; + /* 3 */ + max-width: none; +} +/* + * Fix initial iframe width. Without the viewport is expanded on iOS devices + */ +[uk-responsive], +[data-uk-responsive] { + max-width: 100%; +} +/* Object + ========================================================================== */ +.uk-object-cover { + object-fit: cover; +} +.uk-object-contain { + object-fit: contain; +} +.uk-object-fill { + object-fit: fill; +} +.uk-object-none { + object-fit: none; +} +.uk-object-scale-down { + object-fit: scale-down; +} +/* + * Position + */ +.uk-object-top-right { + object-position: 100% 0; +} +.uk-object-top-center { + object-position: 50% 0; +} +.uk-object-top-left { + object-position: 0% 0; +} +.uk-object-center-right { + object-position: 100% 50%; +} +.uk-object-center-center { + object-position: 50% 50%; +} +.uk-object-center-left { + object-position: 0% 50%; +} +.uk-object-bottom-right { + object-position: 100% 100%; +} +.uk-object-bottom-center { + object-position: 50% 100%; +} +.uk-object-bottom-left { + object-position: 0% 100%; +} +/* Border + ========================================================================== */ +.uk-border-circle { + border-radius: 50%; +} +.uk-border-pill { + border-radius: 500px; +} +.uk-border-rounded { + border-radius: 5px; +} +/* + * Fix `overflow: hidden` to be ignored with border-radius and CSS transforms in Webkit + */ +.uk-inline-clip[class*="uk-border-"] { + -webkit-transform: translateZ(0); +} +/* Box-shadow + ========================================================================== */ +.uk-box-shadow-small { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-medium { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-large { + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-box-shadow-xlarge { + box-shadow: 0 28px 50px rgba(0, 0, 0, 0.16); +} +/* + * Hover + */ +[class*="uk-box-shadow-hover"] { + transition: box-shadow 0.1s ease-in-out; +} +.uk-box-shadow-hover-small:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-hover-medium:hover { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-hover-large:hover { + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-box-shadow-hover-xlarge:hover { + box-shadow: 0 28px 50px rgba(0, 0, 0, 0.16); +} +/* Box-shadow bottom + ========================================================================== */ +/* + * 1. Set position. + * 2. Set style + * 3. Fix shadow being clipped in Safari if container is animated + */ +@supports (filter: blur(0)) { + .uk-box-shadow-bottom { + display: inline-block; + position: relative; + z-index: 0; + max-width: 100%; + vertical-align: middle; + } + .uk-box-shadow-bottom::after { + content: ""; + /* 1 */ + position: absolute; + bottom: -30px; + right: 0; + left: 0; + z-index: -1; + /* 2 */ + height: 30px; + border-radius: 100%; + background: #444; + filter: blur(20px); + /* 3 */ + will-change: filter; + } +} +/* Drop cap + ========================================================================== */ +/* + * 1. Firefox doesn't apply `::first-letter` if the first letter is inside child elements + * https://bugzilla.mozilla.org/show_bug.cgi?id=214004 + * 2. In Firefox, a floating `::first-letter` doesn't have a line box and there for no `line-height` + * https://bugzilla.mozilla.org/show_bug.cgi?id=317933 + */ +.uk-dropcap::first-letter, +.uk-dropcap > p:first-of-type::first-letter { + display: block; + margin-left: 10px; + float: right; + font-size: 4.5em; + line-height: 1; + margin-bottom: -2px; +} +/* 2 */ +@-moz-document url-prefix() { + .uk-dropcap::first-letter, + .uk-dropcap > p:first-of-type::first-letter { + margin-top: 1.1%; + } +} +/* Logo + ========================================================================== */ +/* + * 1. Style + * 2. Required for `a` + * 3. Behave like image but can be overridden through flex utility classes + */ +.uk-logo { + /* 1 */ + font-size: 1.5rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + color: #333; + /* 2 */ + text-decoration: none; +} +/* 3 */ +:where(.uk-logo) { + display: inline-block; + vertical-align: middle; +} +/* Hover */ +.uk-logo:hover { + color: #333; + /* 1 */ + text-decoration: none; +} +.uk-logo :where(img, svg, video) { + display: block; +} +.uk-logo-inverse { + display: none; +} +/* Disabled State + ========================================================================== */ +.uk-disabled { + pointer-events: none; +} +/* Drag State + ========================================================================== */ +/* + * 1. Needed if moving over elements with have their own cursor on hover, e.g. links or buttons + * 2. Fix dragging over iframes + */ +.uk-drag, +.uk-drag * { + cursor: move; +} +/* 2 */ +.uk-drag iframe { + pointer-events: none; +} +/* Dragover State + ========================================================================== */ +/* + * Create a box-shadow when dragging a file over the upload area + */ +.uk-dragover { + box-shadow: 0 0 20px rgba(100, 100, 100, 0.3); +} +/* Blend modes + ========================================================================== */ +.uk-blend-multiply { + mix-blend-mode: multiply; +} +.uk-blend-screen { + mix-blend-mode: screen; +} +.uk-blend-overlay { + mix-blend-mode: overlay; +} +.uk-blend-darken { + mix-blend-mode: darken; +} +.uk-blend-lighten { + mix-blend-mode: lighten; +} +.uk-blend-color-dodge { + mix-blend-mode: color-dodge; +} +.uk-blend-color-burn { + mix-blend-mode: color-burn; +} +.uk-blend-hard-light { + mix-blend-mode: hard-light; +} +.uk-blend-soft-light { + mix-blend-mode: soft-light; +} +.uk-blend-difference { + mix-blend-mode: difference; +} +.uk-blend-exclusion { + mix-blend-mode: exclusion; +} +.uk-blend-hue { + mix-blend-mode: hue; +} +.uk-blend-saturation { + mix-blend-mode: saturation; +} +.uk-blend-color { + mix-blend-mode: color; +} +.uk-blend-luminosity { + mix-blend-mode: luminosity; +} +/* Transform +========================================================================== */ +.uk-transform-center { + transform: translate(50%, -50%); +} +/* Transform Origin +========================================================================== */ +.uk-transform-origin-top-right { + transform-origin: 100% 0; +} +.uk-transform-origin-top-center { + transform-origin: 50% 0; +} +.uk-transform-origin-top-left { + transform-origin: 0% 0; +} +.uk-transform-origin-center-right { + transform-origin: 100% 50%; +} +.uk-transform-origin-center-left { + transform-origin: 0% 50%; +} +.uk-transform-origin-bottom-right { + transform-origin: 100% 100%; +} +.uk-transform-origin-bottom-center { + transform-origin: 50% 100%; +} +.uk-transform-origin-bottom-left { + transform-origin: 0% 100%; +} +/* ======================================================================== + Component: Flex + ========================================================================== */ +.uk-flex { + display: flex; +} +.uk-flex-inline { + display: inline-flex; +} +/* Alignment + ========================================================================== */ +/* + * Align items along the main axis of the current line of the flex container + * Row: Horizontal + */ +.uk-flex-right { + justify-content: flex-start; +} +.uk-flex-center { + justify-content: center; +} +.uk-flex-left { + justify-content: flex-end; +} +.uk-flex-between { + justify-content: space-between; +} +.uk-flex-around { + justify-content: space-around; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-right\@s { + justify-content: flex-start; + } + .uk-flex-center\@s { + justify-content: center; + } + .uk-flex-left\@s { + justify-content: flex-end; + } + .uk-flex-between\@s { + justify-content: space-between; + } + .uk-flex-around\@s { + justify-content: space-around; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-right\@m { + justify-content: flex-start; + } + .uk-flex-center\@m { + justify-content: center; + } + .uk-flex-left\@m { + justify-content: flex-end; + } + .uk-flex-between\@m { + justify-content: space-between; + } + .uk-flex-around\@m { + justify-content: space-around; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-right\@l { + justify-content: flex-start; + } + .uk-flex-center\@l { + justify-content: center; + } + .uk-flex-left\@l { + justify-content: flex-end; + } + .uk-flex-between\@l { + justify-content: space-between; + } + .uk-flex-around\@l { + justify-content: space-around; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-right\@xl { + justify-content: flex-start; + } + .uk-flex-center\@xl { + justify-content: center; + } + .uk-flex-left\@xl { + justify-content: flex-end; + } + .uk-flex-between\@xl { + justify-content: space-between; + } + .uk-flex-around\@xl { + justify-content: space-around; + } +} +/* + * Align items in the cross axis of the current line of the flex container + * Row: Vertical + */ +.uk-flex-stretch { + align-items: stretch; +} +.uk-flex-top { + align-items: flex-start; +} +.uk-flex-middle { + align-items: center; +} +.uk-flex-bottom { + align-items: flex-end; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-stretch\@s { + align-items: stretch; + } + .uk-flex-top\@s { + align-items: flex-start; + } + .uk-flex-middle\@s { + align-items: center; + } + .uk-flex-bottom\@s { + align-items: flex-end; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-stretch\@m { + align-items: stretch; + } + .uk-flex-top\@m { + align-items: flex-start; + } + .uk-flex-middle\@m { + align-items: center; + } + .uk-flex-bottom\@m { + align-items: flex-end; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-stretch\@l { + align-items: stretch; + } + .uk-flex-top\@l { + align-items: flex-start; + } + .uk-flex-middle\@l { + align-items: center; + } + .uk-flex-bottom\@l { + align-items: flex-end; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-stretch\@xl { + align-items: stretch; + } + .uk-flex-top\@xl { + align-items: flex-start; + } + .uk-flex-middle\@xl { + align-items: center; + } + .uk-flex-bottom\@xl { + align-items: flex-end; + } +} +/* Direction + ========================================================================== */ +.uk-flex-row { + flex-direction: row; +} +.uk-flex-row-reverse { + flex-direction: row-reverse; +} +.uk-flex-column { + flex-direction: column; +} +.uk-flex-column-reverse { + flex-direction: column-reverse; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-row\@s { + flex-direction: row; + } + .uk-flex-column\@s { + flex-direction: column; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-row\@m { + flex-direction: row; + } + .uk-flex-column\@m { + flex-direction: column; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-row\@l { + flex-direction: row; + } + .uk-flex-column\@l { + flex-direction: column; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-row\@xl { + flex-direction: row; + } + .uk-flex-column\@xl { + flex-direction: column; + } +} +/* Wrap + ========================================================================== */ +.uk-flex-nowrap { + flex-wrap: nowrap; +} +.uk-flex-wrap { + flex-wrap: wrap; +} +.uk-flex-wrap-reverse { + flex-wrap: wrap-reverse; +} +/* + * Aligns items within the flex container when there is extra space in the cross-axis + * Only works if there is more than one line of flex items + */ +.uk-flex-wrap-stretch { + align-content: stretch; +} +.uk-flex-wrap-top { + align-content: flex-start; +} +.uk-flex-wrap-middle { + align-content: center; +} +.uk-flex-wrap-bottom { + align-content: flex-end; +} +.uk-flex-wrap-between { + align-content: space-between; +} +.uk-flex-wrap-around { + align-content: space-around; +} +/* Item ordering + ========================================================================== */ +/* + * Default is 0 + */ +.uk-flex-first { + order: -1; +} +.uk-flex-last { + order: 99; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-first\@s { + order: -1; + } + .uk-flex-last\@s { + order: 99; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-first\@m { + order: -1; + } + .uk-flex-last\@m { + order: 99; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-first\@l { + order: -1; + } + .uk-flex-last\@l { + order: 99; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-first\@xl { + order: -1; + } + .uk-flex-last\@xl { + order: 99; + } +} +/* Item dimensions + ========================================================================== */ +/* + * Initial: 0 1 auto + * Content dimensions, but shrinks + */ +.uk-flex-initial { + flex: initial; +} +/* + * No Flex: 0 0 auto + * Content dimensions + */ +.uk-flex-none { + flex: none; +} +/* + * Relative Flex: 1 1 auto + * Space is allocated considering content + */ +.uk-flex-auto { + flex: auto; +} +/* + * Absolute Flex: 1 1 0% + * Space is allocated solely based on flex + */ +.uk-flex-1 { + flex: 1; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-initial\@s { + flex: initial; + } + .uk-flex-none\@s { + flex: none; + } + .uk-flex-1\@s { + flex: 1; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-initial\@m { + flex: initial; + } + .uk-flex-none\@m { + flex: none; + } + .uk-flex-1\@m { + flex: 1; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-initial\@l { + flex: initial; + } + .uk-flex-none\@l { + flex: none; + } + .uk-flex-1\@l { + flex: 1; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-initial\@xl { + flex: initial; + } + .uk-flex-none\@xl { + flex: none; + } + .uk-flex-1\@xl { + flex: 1; + } +} +/* ======================================================================== + Component: Margin + ========================================================================== */ +/* + * Default + */ +.uk-margin { + margin-bottom: 20px; +} +* + .uk-margin { + margin-top: 20px !important; +} +.uk-margin-top { + margin-top: 20px !important; +} +.uk-margin-bottom { + margin-bottom: 20px !important; +} +.uk-margin-right { + margin-right: 20px !important; +} +.uk-margin-left { + margin-left: 20px !important; +} +/* XSmall + ========================================================================== */ +.uk-margin-xsmall { + margin-bottom: 5px; +} +* + .uk-margin-xsmall { + margin-top: 5px !important; +} +.uk-margin-xsmall-top { + margin-top: 5px !important; +} +.uk-margin-xsmall-bottom { + margin-bottom: 5px !important; +} +.uk-margin-xsmall-right { + margin-right: 5px !important; +} +.uk-margin-xsmall-left { + margin-left: 5px !important; +} +/* Small + ========================================================================== */ +.uk-margin-small { + margin-bottom: 10px; +} +* + .uk-margin-small { + margin-top: 10px !important; +} +.uk-margin-small-top { + margin-top: 10px !important; +} +.uk-margin-small-bottom { + margin-bottom: 10px !important; +} +.uk-margin-small-right { + margin-right: 10px !important; +} +.uk-margin-small-left { + margin-left: 10px !important; +} +/* Medium + ========================================================================== */ +.uk-margin-medium { + margin-bottom: 40px; +} +* + .uk-margin-medium { + margin-top: 40px !important; +} +.uk-margin-medium-top { + margin-top: 40px !important; +} +.uk-margin-medium-bottom { + margin-bottom: 40px !important; +} +.uk-margin-medium-right { + margin-right: 40px !important; +} +.uk-margin-medium-left { + margin-left: 40px !important; +} +/* Large + ========================================================================== */ +.uk-margin-large { + margin-bottom: 40px; +} +* + .uk-margin-large { + margin-top: 40px !important; +} +.uk-margin-large-top { + margin-top: 40px !important; +} +.uk-margin-large-bottom { + margin-bottom: 40px !important; +} +.uk-margin-large-right { + margin-right: 40px !important; +} +.uk-margin-large-left { + margin-left: 40px !important; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-large { + margin-bottom: 70px; + } + * + .uk-margin-large { + margin-top: 70px !important; + } + .uk-margin-large-top { + margin-top: 70px !important; + } + .uk-margin-large-bottom { + margin-bottom: 70px !important; + } + .uk-margin-large-right { + margin-right: 70px !important; + } + .uk-margin-large-left { + margin-left: 70px !important; + } +} +/* XLarge + ========================================================================== */ +.uk-margin-xlarge { + margin-bottom: 70px; +} +* + .uk-margin-xlarge { + margin-top: 70px !important; +} +.uk-margin-xlarge-top { + margin-top: 70px !important; +} +.uk-margin-xlarge-bottom { + margin-bottom: 70px !important; +} +.uk-margin-xlarge-right { + margin-right: 70px !important; +} +.uk-margin-xlarge-left { + margin-left: 70px !important; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-xlarge { + margin-bottom: 140px; + } + * + .uk-margin-xlarge { + margin-top: 140px !important; + } + .uk-margin-xlarge-top { + margin-top: 140px !important; + } + .uk-margin-xlarge-bottom { + margin-bottom: 140px !important; + } + .uk-margin-xlarge-right { + margin-right: 140px !important; + } + .uk-margin-xlarge-left { + margin-left: 140px !important; + } +} +/* Auto + ========================================================================== */ +.uk-margin-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.uk-margin-auto-top { + margin-top: auto !important; +} +.uk-margin-auto-bottom { + margin-bottom: auto !important; +} +.uk-margin-auto-right { + margin-right: auto !important; +} +.uk-margin-auto-left { + margin-left: auto !important; +} +.uk-margin-auto-vertical { + margin-top: auto !important; + margin-bottom: auto !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-margin-auto\@s { + margin-right: auto !important; + margin-left: auto !important; + } + .uk-margin-auto-right\@s { + margin-right: auto !important; + } + .uk-margin-auto-left\@s { + margin-left: auto !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-margin-auto\@m { + margin-right: auto !important; + margin-left: auto !important; + } + .uk-margin-auto-right\@m { + margin-right: auto !important; + } + .uk-margin-auto-left\@m { + margin-left: auto !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-auto\@l { + margin-right: auto !important; + margin-left: auto !important; + } + .uk-margin-auto-right\@l { + margin-right: auto !important; + } + .uk-margin-auto-left\@l { + margin-left: auto !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-margin-auto\@xl { + margin-right: auto !important; + margin-left: auto !important; + } + .uk-margin-auto-right\@xl { + margin-right: auto !important; + } + .uk-margin-auto-left\@xl { + margin-left: auto !important; + } +} +/* Remove + ========================================================================== */ +.uk-margin-remove { + margin: 0 !important; +} +.uk-margin-remove-top { + margin-top: 0 !important; +} +.uk-margin-remove-bottom { + margin-bottom: 0 !important; +} +.uk-margin-remove-right { + margin-right: 0 !important; +} +.uk-margin-remove-left { + margin-left: 0 !important; +} +.uk-margin-remove-vertical { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.uk-margin-remove-adjacent + *, +.uk-margin-remove-first-child > :first-child { + margin-top: 0 !important; +} +.uk-margin-remove-last-child > :last-child { + margin-bottom: 0 !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-margin-remove-right\@s { + margin-right: 0 !important; + } + .uk-margin-remove-left\@s { + margin-left: 0 !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-margin-remove-right\@m { + margin-right: 0 !important; + } + .uk-margin-remove-left\@m { + margin-left: 0 !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-remove-right\@l { + margin-right: 0 !important; + } + .uk-margin-remove-left\@l { + margin-left: 0 !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-margin-remove-right\@xl { + margin-right: 0 !important; + } + .uk-margin-remove-left\@xl { + margin-left: 0 !important; + } +} +/* ======================================================================== + Component: Padding + ========================================================================== */ +.uk-padding { + padding: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-padding { + padding: 40px; + } +} +/* Small + ========================================================================== */ +.uk-padding-small { + padding: 15px; +} +/* Large + ========================================================================== */ +.uk-padding-large { + padding: 40px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-padding-large { + padding: 70px; + } +} +/* Remove + ========================================================================== */ +.uk-padding-remove { + padding: 0 !important; +} +.uk-padding-remove-top { + padding-top: 0 !important; +} +.uk-padding-remove-bottom { + padding-bottom: 0 !important; +} +.uk-padding-remove-right { + padding-right: 0 !important; +} +.uk-padding-remove-left { + padding-left: 0 !important; +} +.uk-padding-remove-vertical { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.uk-padding-remove-horizontal { + padding-right: 0 !important; + padding-left: 0 !important; +} +/* ======================================================================== + Component: Position + ========================================================================== */ +:root { + --uk-position-margin-offset: 0px; +} +/* Directions + ========================================================================== */ +/* + * 1. Prevent content overflow. + */ +[class*="uk-position-top"], +[class*="uk-position-bottom"], +[class*="uk-position-right"], +[class*="uk-position-left"], +[class*="uk-position-center"] { + position: absolute !important; + /* 1 */ + max-width: calc(100% - (var(--uk-position-margin-offset) * 2)); + box-sizing: border-box; +} +/* + * Edges + * Don't use `width: 100%` because it's wrong if the parent has padding. + */ +.uk-position-top { + top: 0; + right: 0; + left: 0; +} +.uk-position-bottom { + bottom: 0; + right: 0; + left: 0; +} +.uk-position-right { + top: 0; + bottom: 0; + right: 0; +} +.uk-position-left { + top: 0; + bottom: 0; + left: 0; +} +/* + * Corners + */ +.uk-position-top-right { + top: 0; + right: 0; +} +.uk-position-top-left { + top: 0; + left: 0; +} +.uk-position-bottom-right { + bottom: 0; + right: 0; +} +.uk-position-bottom-left { + bottom: 0; + left: 0; +} +/* + * Center + * 1. Fix text wrapping if content is larger than 50% of the container. + * Using `max-content` requires `max-width` of 100% which is set generally. + */ +.uk-position-center { + top: calc(50% - var(--uk-position-margin-offset)); + right: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-x: 50%; + --uk-position-translate-y: -50%; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)); + /* 1 */ + width: max-content; +} +/* Vertical */ +[class*="uk-position-center-right"], +[class*="uk-position-center-left"], +.uk-position-center-vertical { + top: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-y: -50%; + transform: translate(0, var(--uk-position-translate-y)); +} +.uk-position-center-right { + right: 0; +} +.uk-position-center-left { + left: 0; +} +.uk-position-center-vertical { + right: 0; + left: 0; +} +.uk-position-center-right-out { + left: 100%; + width: max-content; +} +.uk-position-center-left-out { + right: 100%; + width: max-content; +} +/* Horizontal */ +.uk-position-top-center, +.uk-position-bottom-center, +.uk-position-center-horizontal { + right: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-x: 50%; + transform: translate(var(--uk-position-translate-x), 0); + /* 1 */ + width: max-content; +} +.uk-position-top-center { + top: 0; +} +.uk-position-bottom-center { + bottom: 0; +} +.uk-position-center-horizontal { + top: 0; + bottom: 0; +} +/* + * Cover + */ +.uk-position-cover { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; +} +/* Margin + ========================================================================== */ +.uk-position-small { + margin: 15px; + --uk-position-margin-offset: 15px; +} +.uk-position-medium { + margin: 30px; + --uk-position-margin-offset: 30px; +} +.uk-position-large { + margin: 30px; + --uk-position-margin-offset: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-position-large { + margin: 50px; + --uk-position-margin-offset: 50px; + } +} +/* Schemes + ========================================================================== */ +.uk-position-relative { + position: relative !important; +} +.uk-position-absolute { + position: absolute !important; +} +.uk-position-fixed { + position: fixed !important; +} +.uk-position-sticky { + position: sticky !important; +} +/* Layer + ========================================================================== */ +.uk-position-z-index { + z-index: 1; +} +.uk-position-z-index-zero { + z-index: 0; +} +.uk-position-z-index-negative { + z-index: -1; +} +.uk-position-z-index-high { + z-index: 990; +} +/* ======================================================================== + Component: Transition + ========================================================================== */ +/* Transitions + ========================================================================== */ +/* + * The toggle is triggered on touch devices by two methods: + * 1. Using `:focus` and tabindex + * 2. Using `:hover` and a `touchstart` event listener registered on the document + * (Doesn't work on Surface touch devices) + */ +:where(.uk-transition-fade), +:where([class*="uk-transition-scale"]), +:where([class*="uk-transition-slide"]) { + --uk-position-translate-x: 0; + --uk-position-translate-y: 0; +} +.uk-transition-fade, +[class*="uk-transition-scale"], +[class*="uk-transition-slide"] { + --uk-translate-x: 0; + --uk-translate-y: 0; + --uk-scale-x: 1; + --uk-scale-y: 1; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y)); + transition: 0.3s ease-out; + transition-property: opacity, transform, filter; + opacity: 0; +} +/* + * Fade + */ +.uk-transition-toggle:hover .uk-transition-fade, +.uk-transition-toggle:focus .uk-transition-fade, +.uk-transition-toggle:focus-within .uk-transition-fade, +.uk-transition-active.uk-active .uk-transition-fade { + opacity: 1; +} +/* + * Scale + * 1. Make image rendering the same during the transition as before and after. Prefixed because of Safari. + */ +/* 1 */ +[class*="uk-transition-scale"] { + -webkit-backface-visibility: hidden; +} +.uk-transition-scale-up { + --uk-scale-x: 1; + --uk-scale-y: 1; +} +.uk-transition-scale-down { + --uk-scale-x: 1.03; + --uk-scale-y: 1.03; +} +/* Show */ +.uk-transition-toggle:hover .uk-transition-scale-up, +.uk-transition-toggle:focus .uk-transition-scale-up, +.uk-transition-toggle:focus-within .uk-transition-scale-up, +.uk-transition-active.uk-active .uk-transition-scale-up { + --uk-scale-x: 1.03; + --uk-scale-y: 1.03; + opacity: 1; +} +.uk-transition-toggle:hover .uk-transition-scale-down, +.uk-transition-toggle:focus .uk-transition-scale-down, +.uk-transition-toggle:focus-within .uk-transition-scale-down, +.uk-transition-active.uk-active .uk-transition-scale-down { + --uk-scale-x: 1; + --uk-scale-y: 1; + opacity: 1; +} +/* + * Slide + */ +.uk-transition-slide-top { + --uk-translate-y: -100%; +} +.uk-transition-slide-bottom { + --uk-translate-y: 100%; +} +.uk-transition-slide-right { + --uk-translate-x: -100%; +} +.uk-transition-slide-left { + --uk-translate-x: 100%; +} +.uk-transition-slide-top-small { + --uk-translate-y: calc(-1 * 10px); +} +.uk-transition-slide-bottom-small { + --uk-translate-y: 10px; +} +.uk-transition-slide-right-small { + --uk-translate-x: calc(-1 * 10px); +} +.uk-transition-slide-left-small { + --uk-translate-x: 10px; +} +.uk-transition-slide-top-medium { + --uk-translate-y: calc(-1 * 50px); +} +.uk-transition-slide-bottom-medium { + --uk-translate-y: 50px; +} +.uk-transition-slide-right-medium { + --uk-translate-x: calc(-1 * 50px); +} +.uk-transition-slide-left-medium { + --uk-translate-x: 50px; +} +/* Show */ +.uk-transition-toggle:hover [class*="uk-transition-slide"], +.uk-transition-toggle:focus [class*="uk-transition-slide"], +.uk-transition-toggle:focus-within [class*="uk-transition-slide"], +.uk-transition-active.uk-active [class*="uk-transition-slide"] { + --uk-translate-x: 0; + --uk-translate-y: 0; + opacity: 1; +} +/* Opacity modifier + ========================================================================== */ +.uk-transition-opaque { + opacity: 1; +} +/* Duration modifier + ========================================================================== */ +.uk-transition-slow { + transition-duration: 0.7s; +} +/* Disable modifier + ========================================================================== */ +.uk-transition-disable, +.uk-transition-disable * { + transition: none !important; +} +/* ======================================================================== + Component: Visibility + ========================================================================== */ +/* + * Hidden + * `hidden` attribute also set here to make it stronger + */ +[hidden], +.uk-hidden, +.uk-hidden-empty:empty { + display: none !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-hidden\@s { + display: none !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-hidden\@m { + display: none !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-hidden\@l { + display: none !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-hidden\@xl { + display: none !important; + } +} +/* + * Visible + */ +/* Phone portrait and smaller */ +@media (max-width: 639px) { + .uk-visible\@s { + display: none !important; + } +} +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-visible\@m { + display: none !important; + } +} +/* Tablet landscape and smaller */ +@media (max-width: 1199px) { + .uk-visible\@l { + display: none !important; + } +} +/* Desktop and smaller */ +@media (max-width: 1599px) { + .uk-visible\@xl { + display: none !important; + } +} +/* Visibility + ========================================================================== */ +.uk-invisible { + visibility: hidden !important; +} +/* Based on the State of the Parent Element + ========================================================================== */ +/* + * Mind that `display: none`, `visibility: hidden` and `opacity: 0` + * remove the element from the accessibility tree and that + * `display: none` and `visibility: hidden` are not focusable. + * + * The target stays visible if any element within receives focus through keyboard. + */ +/* + * Remove space when hidden. + * 1. Remove from document flow. + * 2. Hide element and shrink its dimension. Current browsers and screen readers + * keep the element in the accessibility tree even with zero dimensions. + * Using `tabindex="-1"` will show the element on touch devices. + * Note: `clip-path` doesn't work with `tabindex` on touch devices. + */ +.uk-hidden-visually:not(:focus):not(:active):not(:focus-within), +.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)), +.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) { + /* 1 */ + position: absolute !important; + /* 2 */ + width: 0 !important; + height: 0 !important; + padding: 0 !important; + border: 0 !important; + margin: 0 !important; + overflow: hidden !important; +} +/* + * Keep space when hidden. + * Hide element without shrinking its dimension. + * Note: `clip-path` doesn't work with hover for elements outside of the toggle box. + */ +.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { + opacity: 0 !important; +} +/* Based on Hover Capability of the Pointing Device + ========================================================================== */ +/* + * Hover + */ +/* Hide if primary pointing device doesn't support hover, e.g. touch screens. */ +@media (hover: none) { + .uk-hidden-touch { + display: none !important; + } +} +/* Hide if primary pointing device supports hover, e.g. mice. */ +@media (hover) { + .uk-hidden-notouch { + display: none !important; + } +} +/* ======================================================================== + Component: Inverse + ========================================================================== */ +/* + * Implemented class depends on the general theme color + * `uk-light` is for light colors on dark backgrounds + * `uk-dark` is or dark colors on light backgrounds + */ +.uk-light, +.uk-section-primary:not(.uk-preserve-color), +.uk-section-secondary:not(.uk-preserve-color), +.uk-tile-primary:not(.uk-preserve-color), +.uk-tile-secondary:not(.uk-preserve-color), +.uk-card-primary.uk-card-body, +.uk-card-primary > :not([class*="uk-card-media"]), +.uk-card-secondary.uk-card-body, +.uk-card-secondary > :not([class*="uk-card-media"]), +.uk-overlay-primary, +.uk-offcanvas-bar { + color: rgba(255, 255, 255, 0.7); + /* Webkit */ + /* Firefox */ + /* Webkit */ + /* Firefox */ +} +.uk-light a, +.uk-light .uk-link, +.uk-section-primary:not(.uk-preserve-color) a, +.uk-section-primary:not(.uk-preserve-color) .uk-link, +.uk-section-secondary:not(.uk-preserve-color) a, +.uk-section-secondary:not(.uk-preserve-color) .uk-link, +.uk-tile-primary:not(.uk-preserve-color) a, +.uk-tile-primary:not(.uk-preserve-color) .uk-link, +.uk-tile-secondary:not(.uk-preserve-color) a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link, +.uk-card-primary.uk-card-body a, +.uk-card-primary.uk-card-body .uk-link, +.uk-card-primary > :not([class*="uk-card-media"]) a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link, +.uk-card-secondary.uk-card-body a, +.uk-card-secondary.uk-card-body .uk-link, +.uk-card-secondary > :not([class*="uk-card-media"]) a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link, +.uk-overlay-primary a, +.uk-overlay-primary .uk-link, +.uk-offcanvas-bar a, +.uk-offcanvas-bar .uk-link { + color: #fff; +} +.uk-light a:hover, +.uk-light .uk-link:hover, +.uk-light .uk-link-toggle:hover .uk-link, +.uk-section-primary:not(.uk-preserve-color) a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-section-secondary:not(.uk-preserve-color) a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-tile-primary:not(.uk-preserve-color) a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-tile-secondary:not(.uk-preserve-color) a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-card-primary.uk-card-body a:hover, +.uk-card-primary.uk-card-body .uk-link:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link, +.uk-card-primary > :not([class*="uk-card-media"]) a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link, +.uk-card-secondary.uk-card-body a:hover, +.uk-card-secondary.uk-card-body .uk-link:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link, +.uk-card-secondary > :not([class*="uk-card-media"]) a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link, +.uk-overlay-primary a:hover, +.uk-overlay-primary .uk-link:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link, +.uk-offcanvas-bar a:hover, +.uk-offcanvas-bar .uk-link:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link { + color: #fff; +} +.uk-light :not(pre) > code, +.uk-light :not(pre) > kbd, +.uk-light :not(pre) > samp, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > code, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > samp, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > code, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > samp, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > code, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > samp, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > code, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > samp, +.uk-card-primary.uk-card-body :not(pre) > code, +.uk-card-primary.uk-card-body :not(pre) > kbd, +.uk-card-primary.uk-card-body :not(pre) > samp, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > code, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > kbd, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > samp, +.uk-card-secondary.uk-card-body :not(pre) > code, +.uk-card-secondary.uk-card-body :not(pre) > kbd, +.uk-card-secondary.uk-card-body :not(pre) > samp, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > code, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > kbd, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > samp, +.uk-overlay-primary :not(pre) > code, +.uk-overlay-primary :not(pre) > kbd, +.uk-overlay-primary :not(pre) > samp, +.uk-offcanvas-bar :not(pre) > code, +.uk-offcanvas-bar :not(pre) > kbd, +.uk-offcanvas-bar :not(pre) > samp { + color: rgba(255, 255, 255, 0.7); + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light em, +.uk-section-primary:not(.uk-preserve-color) em, +.uk-section-secondary:not(.uk-preserve-color) em, +.uk-tile-primary:not(.uk-preserve-color) em, +.uk-tile-secondary:not(.uk-preserve-color) em, +.uk-card-primary.uk-card-body em, +.uk-card-primary > :not([class*="uk-card-media"]) em, +.uk-card-secondary.uk-card-body em, +.uk-card-secondary > :not([class*="uk-card-media"]) em, +.uk-overlay-primary em, +.uk-offcanvas-bar em { + color: #fff; +} +.uk-light h1, +.uk-light .uk-h1, +.uk-light h2, +.uk-light .uk-h2, +.uk-light h3, +.uk-light .uk-h3, +.uk-light h4, +.uk-light .uk-h4, +.uk-light h5, +.uk-light .uk-h5, +.uk-light h6, +.uk-light .uk-h6, +.uk-light .uk-heading-small, +.uk-light .uk-heading-medium, +.uk-light .uk-heading-large, +.uk-light .uk-heading-xlarge, +.uk-light .uk-heading-2xlarge, +.uk-light .uk-heading-3xlarge, +.uk-section-primary:not(.uk-preserve-color) h1, +.uk-section-primary:not(.uk-preserve-color) .uk-h1, +.uk-section-primary:not(.uk-preserve-color) h2, +.uk-section-primary:not(.uk-preserve-color) .uk-h2, +.uk-section-primary:not(.uk-preserve-color) h3, +.uk-section-primary:not(.uk-preserve-color) .uk-h3, +.uk-section-primary:not(.uk-preserve-color) h4, +.uk-section-primary:not(.uk-preserve-color) .uk-h4, +.uk-section-primary:not(.uk-preserve-color) h5, +.uk-section-primary:not(.uk-preserve-color) .uk-h5, +.uk-section-primary:not(.uk-preserve-color) h6, +.uk-section-primary:not(.uk-preserve-color) .uk-h6, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-small, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-large, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-section-secondary:not(.uk-preserve-color) h1, +.uk-section-secondary:not(.uk-preserve-color) .uk-h1, +.uk-section-secondary:not(.uk-preserve-color) h2, +.uk-section-secondary:not(.uk-preserve-color) .uk-h2, +.uk-section-secondary:not(.uk-preserve-color) h3, +.uk-section-secondary:not(.uk-preserve-color) .uk-h3, +.uk-section-secondary:not(.uk-preserve-color) h4, +.uk-section-secondary:not(.uk-preserve-color) .uk-h4, +.uk-section-secondary:not(.uk-preserve-color) h5, +.uk-section-secondary:not(.uk-preserve-color) .uk-h5, +.uk-section-secondary:not(.uk-preserve-color) h6, +.uk-section-secondary:not(.uk-preserve-color) .uk-h6, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-tile-primary:not(.uk-preserve-color) h1, +.uk-tile-primary:not(.uk-preserve-color) .uk-h1, +.uk-tile-primary:not(.uk-preserve-color) h2, +.uk-tile-primary:not(.uk-preserve-color) .uk-h2, +.uk-tile-primary:not(.uk-preserve-color) h3, +.uk-tile-primary:not(.uk-preserve-color) .uk-h3, +.uk-tile-primary:not(.uk-preserve-color) h4, +.uk-tile-primary:not(.uk-preserve-color) .uk-h4, +.uk-tile-primary:not(.uk-preserve-color) h5, +.uk-tile-primary:not(.uk-preserve-color) .uk-h5, +.uk-tile-primary:not(.uk-preserve-color) h6, +.uk-tile-primary:not(.uk-preserve-color) .uk-h6, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-tile-secondary:not(.uk-preserve-color) h1, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h1, +.uk-tile-secondary:not(.uk-preserve-color) h2, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h2, +.uk-tile-secondary:not(.uk-preserve-color) h3, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h3, +.uk-tile-secondary:not(.uk-preserve-color) h4, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h4, +.uk-tile-secondary:not(.uk-preserve-color) h5, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h5, +.uk-tile-secondary:not(.uk-preserve-color) h6, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h6, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-card-primary.uk-card-body h1, +.uk-card-primary.uk-card-body .uk-h1, +.uk-card-primary.uk-card-body h2, +.uk-card-primary.uk-card-body .uk-h2, +.uk-card-primary.uk-card-body h3, +.uk-card-primary.uk-card-body .uk-h3, +.uk-card-primary.uk-card-body h4, +.uk-card-primary.uk-card-body .uk-h4, +.uk-card-primary.uk-card-body h5, +.uk-card-primary.uk-card-body .uk-h5, +.uk-card-primary.uk-card-body h6, +.uk-card-primary.uk-card-body .uk-h6, +.uk-card-primary.uk-card-body .uk-heading-small, +.uk-card-primary.uk-card-body .uk-heading-medium, +.uk-card-primary.uk-card-body .uk-heading-large, +.uk-card-primary.uk-card-body .uk-heading-xlarge, +.uk-card-primary.uk-card-body .uk-heading-2xlarge, +.uk-card-primary.uk-card-body .uk-heading-3xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) h1, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h1, +.uk-card-primary > :not([class*="uk-card-media"]) h2, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h2, +.uk-card-primary > :not([class*="uk-card-media"]) h3, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h3, +.uk-card-primary > :not([class*="uk-card-media"]) h4, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h4, +.uk-card-primary > :not([class*="uk-card-media"]) h5, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h5, +.uk-card-primary > :not([class*="uk-card-media"]) h6, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h6, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-small, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-medium, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-large, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-2xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-3xlarge, +.uk-card-secondary.uk-card-body h1, +.uk-card-secondary.uk-card-body .uk-h1, +.uk-card-secondary.uk-card-body h2, +.uk-card-secondary.uk-card-body .uk-h2, +.uk-card-secondary.uk-card-body h3, +.uk-card-secondary.uk-card-body .uk-h3, +.uk-card-secondary.uk-card-body h4, +.uk-card-secondary.uk-card-body .uk-h4, +.uk-card-secondary.uk-card-body h5, +.uk-card-secondary.uk-card-body .uk-h5, +.uk-card-secondary.uk-card-body h6, +.uk-card-secondary.uk-card-body .uk-h6, +.uk-card-secondary.uk-card-body .uk-heading-small, +.uk-card-secondary.uk-card-body .uk-heading-medium, +.uk-card-secondary.uk-card-body .uk-heading-large, +.uk-card-secondary.uk-card-body .uk-heading-xlarge, +.uk-card-secondary.uk-card-body .uk-heading-2xlarge, +.uk-card-secondary.uk-card-body .uk-heading-3xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) h1, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h1, +.uk-card-secondary > :not([class*="uk-card-media"]) h2, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h2, +.uk-card-secondary > :not([class*="uk-card-media"]) h3, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h3, +.uk-card-secondary > :not([class*="uk-card-media"]) h4, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h4, +.uk-card-secondary > :not([class*="uk-card-media"]) h5, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h5, +.uk-card-secondary > :not([class*="uk-card-media"]) h6, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h6, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-small, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-medium, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-large, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-2xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-3xlarge, +.uk-overlay-primary h1, +.uk-overlay-primary .uk-h1, +.uk-overlay-primary h2, +.uk-overlay-primary .uk-h2, +.uk-overlay-primary h3, +.uk-overlay-primary .uk-h3, +.uk-overlay-primary h4, +.uk-overlay-primary .uk-h4, +.uk-overlay-primary h5, +.uk-overlay-primary .uk-h5, +.uk-overlay-primary h6, +.uk-overlay-primary .uk-h6, +.uk-overlay-primary .uk-heading-small, +.uk-overlay-primary .uk-heading-medium, +.uk-overlay-primary .uk-heading-large, +.uk-overlay-primary .uk-heading-xlarge, +.uk-overlay-primary .uk-heading-2xlarge, +.uk-overlay-primary .uk-heading-3xlarge, +.uk-offcanvas-bar h1, +.uk-offcanvas-bar .uk-h1, +.uk-offcanvas-bar h2, +.uk-offcanvas-bar .uk-h2, +.uk-offcanvas-bar h3, +.uk-offcanvas-bar .uk-h3, +.uk-offcanvas-bar h4, +.uk-offcanvas-bar .uk-h4, +.uk-offcanvas-bar h5, +.uk-offcanvas-bar .uk-h5, +.uk-offcanvas-bar h6, +.uk-offcanvas-bar .uk-h6, +.uk-offcanvas-bar .uk-heading-small, +.uk-offcanvas-bar .uk-heading-medium, +.uk-offcanvas-bar .uk-heading-large, +.uk-offcanvas-bar .uk-heading-xlarge, +.uk-offcanvas-bar .uk-heading-2xlarge, +.uk-offcanvas-bar .uk-heading-3xlarge { + color: #fff; +} +.uk-light blockquote, +.uk-section-primary:not(.uk-preserve-color) blockquote, +.uk-section-secondary:not(.uk-preserve-color) blockquote, +.uk-tile-primary:not(.uk-preserve-color) blockquote, +.uk-tile-secondary:not(.uk-preserve-color) blockquote, +.uk-card-primary.uk-card-body blockquote, +.uk-card-primary > :not([class*="uk-card-media"]) blockquote, +.uk-card-secondary.uk-card-body blockquote, +.uk-card-secondary > :not([class*="uk-card-media"]) blockquote, +.uk-overlay-primary blockquote, +.uk-offcanvas-bar blockquote { + color: #fff; +} +.uk-light blockquote footer, +.uk-section-primary:not(.uk-preserve-color) blockquote footer, +.uk-section-secondary:not(.uk-preserve-color) blockquote footer, +.uk-tile-primary:not(.uk-preserve-color) blockquote footer, +.uk-tile-secondary:not(.uk-preserve-color) blockquote footer, +.uk-card-primary.uk-card-body blockquote footer, +.uk-card-primary > :not([class*="uk-card-media"]) blockquote footer, +.uk-card-secondary.uk-card-body blockquote footer, +.uk-card-secondary > :not([class*="uk-card-media"]) blockquote footer, +.uk-overlay-primary blockquote footer, +.uk-offcanvas-bar blockquote footer { + color: rgba(255, 255, 255, 0.7); +} +.uk-light hr, +.uk-light .uk-hr, +.uk-section-primary:not(.uk-preserve-color) hr, +.uk-section-primary:not(.uk-preserve-color) .uk-hr, +.uk-section-secondary:not(.uk-preserve-color) hr, +.uk-section-secondary:not(.uk-preserve-color) .uk-hr, +.uk-tile-primary:not(.uk-preserve-color) hr, +.uk-tile-primary:not(.uk-preserve-color) .uk-hr, +.uk-tile-secondary:not(.uk-preserve-color) hr, +.uk-tile-secondary:not(.uk-preserve-color) .uk-hr, +.uk-card-primary.uk-card-body hr, +.uk-card-primary.uk-card-body .uk-hr, +.uk-card-primary > :not([class*="uk-card-media"]) hr, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-hr, +.uk-card-secondary.uk-card-body hr, +.uk-card-secondary.uk-card-body .uk-hr, +.uk-card-secondary > :not([class*="uk-card-media"]) hr, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-hr, +.uk-overlay-primary hr, +.uk-overlay-primary .uk-hr, +.uk-offcanvas-bar hr, +.uk-offcanvas-bar .uk-hr { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light :focus-visible, +.uk-section-primary:not(.uk-preserve-color) :focus-visible, +.uk-section-secondary:not(.uk-preserve-color) :focus-visible, +.uk-tile-primary:not(.uk-preserve-color) :focus-visible, +.uk-tile-secondary:not(.uk-preserve-color) :focus-visible, +.uk-card-primary.uk-card-body :focus-visible, +.uk-card-primary > :not([class*="uk-card-media"]) :focus-visible, +.uk-card-secondary.uk-card-body :focus-visible, +.uk-card-secondary > :not([class*="uk-card-media"]) :focus-visible, +.uk-overlay-primary :focus-visible, +.uk-offcanvas-bar :focus-visible { + outline-color: #fff; +} +.uk-light a.uk-link-muted, +.uk-light .uk-link-muted a, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted, +.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a, +.uk-card-primary.uk-card-body a.uk-link-muted, +.uk-card-primary.uk-card-body .uk-link-muted a, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-muted, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-muted a, +.uk-card-secondary.uk-card-body a.uk-link-muted, +.uk-card-secondary.uk-card-body .uk-link-muted a, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-muted a, +.uk-overlay-primary a.uk-link-muted, +.uk-overlay-primary .uk-link-muted a, +.uk-offcanvas-bar a.uk-link-muted, +.uk-offcanvas-bar .uk-link-muted a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light a.uk-link-muted:hover, +.uk-light .uk-link-muted a:hover, +.uk-light .uk-link-toggle:hover .uk-link-muted, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-card-primary.uk-card-body a.uk-link-muted:hover, +.uk-card-primary.uk-card-body .uk-link-muted a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-muted:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-muted a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-muted, +.uk-card-secondary.uk-card-body a.uk-link-muted:hover, +.uk-card-secondary.uk-card-body .uk-link-muted a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-muted:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-muted a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-muted, +.uk-overlay-primary a.uk-link-muted:hover, +.uk-overlay-primary .uk-link-muted a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted, +.uk-offcanvas-bar a.uk-link-muted:hover, +.uk-offcanvas-bar .uk-link-muted a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted { + color: rgba(255, 255, 255, 0.7); +} +.uk-light a.uk-link-text:hover, +.uk-light .uk-link-text a:hover, +.uk-light .uk-link-toggle:hover .uk-link-text, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-card-primary.uk-card-body a.uk-link-text:hover, +.uk-card-primary.uk-card-body .uk-link-text a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-text:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-text a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-text, +.uk-card-secondary.uk-card-body a.uk-link-text:hover, +.uk-card-secondary.uk-card-body .uk-link-text a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-text:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-text a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-text, +.uk-overlay-primary a.uk-link-text:hover, +.uk-overlay-primary .uk-link-text a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-text, +.uk-offcanvas-bar a.uk-link-text:hover, +.uk-offcanvas-bar .uk-link-text a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text { + color: rgba(255, 255, 255, 0.5); +} +.uk-light a.uk-link-heading:hover, +.uk-light .uk-link-heading a:hover, +.uk-light .uk-link-toggle:hover .uk-link-heading, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-card-primary.uk-card-body a.uk-link-heading:hover, +.uk-card-primary.uk-card-body .uk-link-heading a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-heading:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-heading a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-heading, +.uk-card-secondary.uk-card-body a.uk-link-heading:hover, +.uk-card-secondary.uk-card-body .uk-link-heading a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-heading:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-heading a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-heading, +.uk-overlay-primary a.uk-link-heading:hover, +.uk-overlay-primary .uk-link-heading a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading, +.uk-offcanvas-bar a.uk-link-heading:hover, +.uk-offcanvas-bar .uk-link-heading a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading { + color: #fff; +} +.uk-light .uk-heading-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider, +.uk-card-primary.uk-card-body .uk-heading-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-divider, +.uk-card-secondary.uk-card-body .uk-heading-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-divider, +.uk-overlay-primary .uk-heading-divider, +.uk-offcanvas-bar .uk-heading-divider { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-heading-bullet::before, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-card-primary.uk-card-body .uk-heading-bullet::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-bullet::before, +.uk-card-secondary.uk-card-body .uk-heading-bullet::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-bullet::before, +.uk-overlay-primary .uk-heading-bullet::before, +.uk-offcanvas-bar .uk-heading-bullet::before { + border-right-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-heading-line > ::before, +.uk-light .uk-heading-line > ::after, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-card-primary.uk-card-body .uk-heading-line > ::before, +.uk-card-primary.uk-card-body .uk-heading-line > ::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-line > ::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-line > ::after, +.uk-card-secondary.uk-card-body .uk-heading-line > ::before, +.uk-card-secondary.uk-card-body .uk-heading-line > ::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-line > ::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-line > ::after, +.uk-overlay-primary .uk-heading-line > ::before, +.uk-overlay-primary .uk-heading-line > ::after, +.uk-offcanvas-bar .uk-heading-line > ::before, +.uk-offcanvas-bar .uk-heading-line > ::after { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon, +.uk-card-primary.uk-card-body .uk-divider-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon, +.uk-card-secondary.uk-card-body .uk-divider-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon, +.uk-overlay-primary .uk-divider-icon, +.uk-offcanvas-bar .uk-divider-icon { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-divider-icon::before, +.uk-light .uk-divider-icon::after, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-card-primary.uk-card-body .uk-divider-icon::before, +.uk-card-primary.uk-card-body .uk-divider-icon::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon::after, +.uk-card-secondary.uk-card-body .uk-divider-icon::before, +.uk-card-secondary.uk-card-body .uk-divider-icon::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon::after, +.uk-overlay-primary .uk-divider-icon::before, +.uk-overlay-primary .uk-divider-icon::after, +.uk-offcanvas-bar .uk-divider-icon::before, +.uk-offcanvas-bar .uk-divider-icon::after { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-small::after, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-card-primary.uk-card-body .uk-divider-small::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-small::after, +.uk-card-secondary.uk-card-body .uk-divider-small::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-small::after, +.uk-overlay-primary .uk-divider-small::after, +.uk-offcanvas-bar .uk-divider-small::after { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-vertical, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-card-primary.uk-card-body .uk-divider-vertical, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-vertical, +.uk-card-secondary.uk-card-body .uk-divider-vertical, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-vertical, +.uk-overlay-primary .uk-divider-vertical, +.uk-offcanvas-bar .uk-divider-vertical { + border-right-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-muted > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-card-primary.uk-card-body .uk-list-muted > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-muted > ::marker, +.uk-card-secondary.uk-card-body .uk-list-muted > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-muted > ::marker, +.uk-overlay-primary .uk-list-muted > ::marker, +.uk-offcanvas-bar .uk-list-muted > ::marker { + color: rgba(255, 255, 255, 0.5) !important; +} +.uk-light .uk-list-emphasis > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-card-primary.uk-card-body .uk-list-emphasis > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-emphasis > ::marker, +.uk-card-secondary.uk-card-body .uk-list-emphasis > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-emphasis > ::marker, +.uk-overlay-primary .uk-list-emphasis > ::marker, +.uk-offcanvas-bar .uk-list-emphasis > ::marker { + color: #fff !important; +} +.uk-light .uk-list-primary > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-card-primary.uk-card-body .uk-list-primary > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-primary > ::marker, +.uk-card-secondary.uk-card-body .uk-list-primary > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-primary > ::marker, +.uk-overlay-primary .uk-list-primary > ::marker, +.uk-offcanvas-bar .uk-list-primary > ::marker { + color: #fff !important; +} +.uk-light .uk-list-secondary > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-card-primary.uk-card-body .uk-list-secondary > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-secondary > ::marker, +.uk-card-secondary.uk-card-body .uk-list-secondary > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-secondary > ::marker, +.uk-overlay-primary .uk-list-secondary > ::marker, +.uk-offcanvas-bar .uk-list-secondary > ::marker { + color: #fff !important; +} +.uk-light .uk-list-bullet > ::before, +.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-card-primary.uk-card-body .uk-list-bullet > ::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-bullet > ::before, +.uk-card-secondary.uk-card-body .uk-list-bullet > ::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-bullet > ::before, +.uk-overlay-primary .uk-list-bullet > ::before, +.uk-offcanvas-bar .uk-list-bullet > ::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-list-divider > :nth-child(n+2), +.uk-section-primary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-card-primary.uk-card-body .uk-list-divider > :nth-child(n+2), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-divider > :nth-child(n+2), +.uk-card-secondary.uk-card-body .uk-list-divider > :nth-child(n+2), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-divider > :nth-child(n+2), +.uk-overlay-primary .uk-list-divider > :nth-child(n+2), +.uk-offcanvas-bar .uk-list-divider > :nth-child(n+2) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-striped > *:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-list-striped > *:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-striped > *:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-list-striped > *:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-striped > *:nth-of-type(odd), +.uk-overlay-primary .uk-list-striped > *:nth-of-type(odd), +.uk-offcanvas-bar .uk-list-striped > *:nth-of-type(odd) { + border-top-color: rgba(255, 255, 255, 0.2); + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-striped > :nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-list-striped > :nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-striped > :nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-list-striped > :nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-striped > :nth-of-type(odd), +.uk-overlay-primary .uk-list-striped > :nth-of-type(odd), +.uk-offcanvas-bar .uk-list-striped > :nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-table th, +.uk-section-primary:not(.uk-preserve-color) .uk-table th, +.uk-section-secondary:not(.uk-preserve-color) .uk-table th, +.uk-tile-primary:not(.uk-preserve-color) .uk-table th, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table th, +.uk-card-primary.uk-card-body .uk-table th, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table th, +.uk-card-secondary.uk-card-body .uk-table th, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table th, +.uk-overlay-primary .uk-table th, +.uk-offcanvas-bar .uk-table th { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-table caption, +.uk-section-primary:not(.uk-preserve-color) .uk-table caption, +.uk-section-secondary:not(.uk-preserve-color) .uk-table caption, +.uk-tile-primary:not(.uk-preserve-color) .uk-table caption, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption, +.uk-card-primary.uk-card-body .uk-table caption, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table caption, +.uk-card-secondary.uk-card-body .uk-table caption, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table caption, +.uk-overlay-primary .uk-table caption, +.uk-offcanvas-bar .uk-table caption { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-table > tr.uk-active, +.uk-light .uk-table tbody tr.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-card-primary.uk-card-body .uk-table > tr.uk-active, +.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table > tr.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table tbody tr.uk-active, +.uk-card-secondary.uk-card-body .uk-table > tr.uk-active, +.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table > tr.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table tbody tr.uk-active, +.uk-overlay-primary .uk-table > tr.uk-active, +.uk-overlay-primary .uk-table tbody tr.uk-active, +.uk-offcanvas-bar .uk-table > tr.uk-active, +.uk-offcanvas-bar .uk-table tbody tr.uk-active { + background: rgba(255, 255, 255, 0.08); +} +.uk-light .uk-table-divider > tr:not(:first-child), +.uk-light .uk-table-divider > :not(:first-child) > tr, +.uk-light .uk-table-divider > :first-child > tr:not(:first-child), +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-primary.uk-card-body .uk-table-divider > tr:not(:first-child), +.uk-card-primary.uk-card-body .uk-table-divider > :not(:first-child) > tr, +.uk-card-primary.uk-card-body .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > tr:not(:first-child), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > :not(:first-child) > tr, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-secondary.uk-card-body .uk-table-divider > tr:not(:first-child), +.uk-card-secondary.uk-card-body .uk-table-divider > :not(:first-child) > tr, +.uk-card-secondary.uk-card-body .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > tr:not(:first-child), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > :not(:first-child) > tr, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-overlay-primary .uk-table-divider > tr:not(:first-child), +.uk-overlay-primary .uk-table-divider > :not(:first-child) > tr, +.uk-overlay-primary .uk-table-divider > :first-child > tr:not(:first-child), +.uk-offcanvas-bar .uk-table-divider > tr:not(:first-child), +.uk-offcanvas-bar .uk-table-divider > :not(:first-child) > tr, +.uk-offcanvas-bar .uk-table-divider > :first-child > tr:not(:first-child) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-table-striped > tr:nth-of-type(odd), +.uk-light .uk-table-striped tbody tr:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-table-striped > tr:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-table-striped > tr:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-overlay-primary .uk-table-striped > tr:nth-of-type(odd), +.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd), +.uk-offcanvas-bar .uk-table-striped > tr:nth-of-type(odd), +.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd) { + background: rgba(255, 255, 255, 0.1); + border-top-color: rgba(255, 255, 255, 0.2); + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-table-hover > tr:hover, +.uk-light .uk-table-hover tbody tr:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-card-primary.uk-card-body .uk-table-hover > tr:hover, +.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-hover > tr:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-hover tbody tr:hover, +.uk-card-secondary.uk-card-body .uk-table-hover > tr:hover, +.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-hover > tr:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-hover tbody tr:hover, +.uk-overlay-primary .uk-table-hover > tr:hover, +.uk-overlay-primary .uk-table-hover tbody tr:hover, +.uk-offcanvas-bar .uk-table-hover > tr:hover, +.uk-offcanvas-bar .uk-table-hover tbody tr:hover { + background: rgba(255, 255, 255, 0.08); +} +.uk-light .uk-icon-link, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link, +.uk-card-primary.uk-card-body .uk-icon-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link, +.uk-card-secondary.uk-card-body .uk-icon-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link, +.uk-overlay-primary .uk-icon-link, +.uk-offcanvas-bar .uk-icon-link { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-icon-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-card-primary.uk-card-body .uk-icon-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link:hover, +.uk-card-secondary.uk-card-body .uk-icon-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link:hover, +.uk-overlay-primary .uk-icon-link:hover, +.uk-offcanvas-bar .uk-icon-link:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-link:active, +.uk-light .uk-active > .uk-icon-link, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-section-primary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-card-primary.uk-card-body .uk-icon-link:active, +.uk-card-primary.uk-card-body .uk-active > .uk-icon-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-active > .uk-icon-link, +.uk-card-secondary.uk-card-body .uk-icon-link:active, +.uk-card-secondary.uk-card-body .uk-active > .uk-icon-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-active > .uk-icon-link, +.uk-overlay-primary .uk-icon-link:active, +.uk-overlay-primary .uk-active > .uk-icon-link, +.uk-offcanvas-bar .uk-icon-link:active, +.uk-offcanvas-bar .uk-active > .uk-icon-link { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-button, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button, +.uk-card-primary.uk-card-body .uk-icon-button, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button, +.uk-card-secondary.uk-card-body .uk-icon-button, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button, +.uk-overlay-primary .uk-icon-button, +.uk-offcanvas-bar .uk-icon-button { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-icon-button:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-card-primary.uk-card-body .uk-icon-button:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button:hover, +.uk-card-secondary.uk-card-body .uk-icon-button:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button:hover, +.uk-overlay-primary .uk-icon-button:hover, +.uk-offcanvas-bar .uk-icon-button:hover { + background-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-button:active, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-card-primary.uk-card-body .uk-icon-button:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button:active, +.uk-card-secondary.uk-card-body .uk-icon-button:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button:active, +.uk-overlay-primary .uk-icon-button:active, +.uk-offcanvas-bar .uk-icon-button:active { + background-color: rgba(255, 255, 255, 0.2); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-range::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range::-webkit-slider-runnable-track { + background: rgba(242, 242, 242, 0.1); +} +.uk-light .uk-range:focus::-webkit-slider-runnable-track, +.uk-light .uk-range:active::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range:active::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:active::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range:active::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:active::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range:focus::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range:active::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range:focus::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range:active::-webkit-slider-runnable-track { + background: rgba(242, 242, 242, 0.15); +} +.uk-light .uk-range::-moz-range-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-card-primary.uk-card-body .uk-range::-moz-range-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-moz-range-track, +.uk-card-secondary.uk-card-body .uk-range::-moz-range-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-moz-range-track, +.uk-overlay-primary .uk-range::-moz-range-track, +.uk-offcanvas-bar .uk-range::-moz-range-track { + background: rgba(242, 242, 242, 0.1); +} +.uk-light .uk-range:focus::-moz-range-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-card-primary.uk-card-body .uk-range:focus::-moz-range-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:focus::-moz-range-track, +.uk-card-secondary.uk-card-body .uk-range:focus::-moz-range-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:focus::-moz-range-track, +.uk-overlay-primary .uk-range:focus::-moz-range-track, +.uk-offcanvas-bar .uk-range:focus::-moz-range-track { + background: rgba(242, 242, 242, 0.15); +} +.uk-light .uk-range::-webkit-slider-thumb, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-card-primary.uk-card-body .uk-range::-webkit-slider-thumb, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-thumb, +.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-thumb, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-thumb, +.uk-overlay-primary .uk-range::-webkit-slider-thumb, +.uk-offcanvas-bar .uk-range::-webkit-slider-thumb { + background: #808080; + border-color: #e6e6e6; +} +.uk-light .uk-range::-moz-range-thumb, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-card-primary.uk-card-body .uk-range::-moz-range-thumb, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-moz-range-thumb, +.uk-card-secondary.uk-card-body .uk-range::-moz-range-thumb, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-moz-range-thumb, +.uk-overlay-primary .uk-range::-moz-range-thumb, +.uk-offcanvas-bar .uk-range::-moz-range-thumb { + background: #808080; + border-color: #e6e6e6; +} +.uk-light .uk-input, +.uk-light .uk-select, +.uk-light .uk-textarea, +.uk-section-primary:not(.uk-preserve-color) .uk-input, +.uk-section-primary:not(.uk-preserve-color) .uk-select, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea, +.uk-section-secondary:not(.uk-preserve-color) .uk-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-select, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea, +.uk-tile-primary:not(.uk-preserve-color) .uk-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-select, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-select, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea, +.uk-card-primary.uk-card-body .uk-input, +.uk-card-primary.uk-card-body .uk-select, +.uk-card-primary.uk-card-body .uk-textarea, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea, +.uk-card-secondary.uk-card-body .uk-input, +.uk-card-secondary.uk-card-body .uk-select, +.uk-card-secondary.uk-card-body .uk-textarea, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea, +.uk-overlay-primary .uk-input, +.uk-overlay-primary .uk-select, +.uk-overlay-primary .uk-textarea, +.uk-offcanvas-bar .uk-input, +.uk-offcanvas-bar .uk-select, +.uk-offcanvas-bar .uk-textarea { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); + background-clip: padding-box; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-input:focus, +.uk-light .uk-select:focus, +.uk-light .uk-textarea:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-select:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-card-primary.uk-card-body .uk-input:focus, +.uk-card-primary.uk-card-body .uk-select:focus, +.uk-card-primary.uk-card-body .uk-textarea:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea:focus, +.uk-card-secondary.uk-card-body .uk-input:focus, +.uk-card-secondary.uk-card-body .uk-select:focus, +.uk-card-secondary.uk-card-body .uk-textarea:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea:focus, +.uk-overlay-primary .uk-input:focus, +.uk-overlay-primary .uk-select:focus, +.uk-overlay-primary .uk-textarea:focus, +.uk-offcanvas-bar .uk-input:focus, +.uk-offcanvas-bar .uk-select:focus, +.uk-offcanvas-bar .uk-textarea:focus { + background-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.7); + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-input::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-card-primary.uk-card-body .uk-input::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input::placeholder, +.uk-card-secondary.uk-card-body .uk-input::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input::placeholder, +.uk-overlay-primary .uk-input::placeholder, +.uk-offcanvas-bar .uk-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-textarea::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-card-primary.uk-card-body .uk-textarea::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea::placeholder, +.uk-card-secondary.uk-card-body .uk-textarea::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea::placeholder, +.uk-overlay-primary .uk-textarea::placeholder, +.uk-offcanvas-bar .uk-textarea::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-select:not([multiple]):not([size]), +.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select:not([multiple]):not([size]), +.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select:not([multiple]):not([size]), +.uk-overlay-primary .uk-select:not([multiple]):not([size]), +.uk-offcanvas-bar .uk-select:not([multiple]):not([size]) { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-input[list]:hover, +.uk-light .uk-input[list]:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-card-primary.uk-card-body .uk-input[list]:hover, +.uk-card-primary.uk-card-body .uk-input[list]:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input[list]:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input[list]:focus, +.uk-card-secondary.uk-card-body .uk-input[list]:hover, +.uk-card-secondary.uk-card-body .uk-input[list]:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input[list]:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input[list]:focus, +.uk-overlay-primary .uk-input[list]:hover, +.uk-overlay-primary .uk-input[list]:focus, +.uk-offcanvas-bar .uk-input[list]:hover, +.uk-offcanvas-bar .uk-input[list]:focus { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-radio, +.uk-light .uk-checkbox, +.uk-section-primary:not(.uk-preserve-color) .uk-radio, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox, +.uk-card-primary.uk-card-body .uk-radio, +.uk-card-primary.uk-card-body .uk-checkbox, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox, +.uk-card-secondary.uk-card-body .uk-radio, +.uk-card-secondary.uk-card-body .uk-checkbox, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox, +.uk-overlay-primary .uk-radio, +.uk-overlay-primary .uk-checkbox, +.uk-offcanvas-bar .uk-radio, +.uk-offcanvas-bar .uk-checkbox { + background-color: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-radio:focus, +.uk-light .uk-checkbox:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-card-primary.uk-card-body .uk-radio:focus, +.uk-card-primary.uk-card-body .uk-checkbox:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:focus, +.uk-card-secondary.uk-card-body .uk-radio:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:focus, +.uk-overlay-primary .uk-radio:focus, +.uk-overlay-primary .uk-checkbox:focus, +.uk-offcanvas-bar .uk-radio:focus, +.uk-offcanvas-bar .uk-checkbox:focus { + background-color: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-radio:checked, +.uk-light .uk-checkbox:checked, +.uk-light .uk-checkbox:indeterminate, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-card-primary.uk-card-body .uk-radio:checked, +.uk-card-primary.uk-card-body .uk-checkbox:checked, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-card-secondary.uk-card-body .uk-radio:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-overlay-primary .uk-radio:checked, +.uk-overlay-primary .uk-checkbox:checked, +.uk-overlay-primary .uk-checkbox:indeterminate, +.uk-offcanvas-bar .uk-radio:checked, +.uk-offcanvas-bar .uk-checkbox:checked, +.uk-offcanvas-bar .uk-checkbox:indeterminate { + background-color: #fff; + border-color: #fff; +} +.uk-light .uk-radio:checked:focus, +.uk-light .uk-checkbox:checked:focus, +.uk-light .uk-checkbox:indeterminate:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-card-primary.uk-card-body .uk-radio:checked:focus, +.uk-card-primary.uk-card-body .uk-checkbox:checked:focus, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate:focus, +.uk-card-secondary.uk-card-body .uk-radio:checked:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate:focus, +.uk-overlay-primary .uk-radio:checked:focus, +.uk-overlay-primary .uk-checkbox:checked:focus, +.uk-overlay-primary .uk-checkbox:indeterminate:focus, +.uk-offcanvas-bar .uk-radio:checked:focus, +.uk-offcanvas-bar .uk-checkbox:checked:focus, +.uk-offcanvas-bar .uk-checkbox:indeterminate:focus { + background-color: #ffffff; +} +.uk-light .uk-radio:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-card-primary.uk-card-body .uk-radio:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-secondary.uk-card-body .uk-radio:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-overlay-primary .uk-radio:checked, +.uk-offcanvas-bar .uk-radio:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-checkbox:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-card-primary.uk-card-body .uk-checkbox:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-overlay-primary .uk-checkbox:checked, +.uk-offcanvas-bar .uk-checkbox:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-checkbox:indeterminate, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-overlay-primary .uk-checkbox:indeterminate, +.uk-offcanvas-bar .uk-checkbox:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-form-label, +.uk-section-primary:not(.uk-preserve-color) .uk-form-label, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-label, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-label, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label, +.uk-card-primary.uk-card-body .uk-form-label, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-label, +.uk-card-secondary.uk-card-body .uk-form-label, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-label, +.uk-overlay-primary .uk-form-label, +.uk-offcanvas-bar .uk-form-label { + color: #fff; +} +.uk-light .uk-form-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-form-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon, +.uk-card-primary.uk-card-body .uk-form-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-icon, +.uk-card-secondary.uk-card-body .uk-form-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-icon, +.uk-overlay-primary .uk-form-icon, +.uk-offcanvas-bar .uk-form-icon { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-form-icon:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-card-primary.uk-card-body .uk-form-icon:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-icon:hover, +.uk-card-secondary.uk-card-body .uk-form-icon:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-icon:hover, +.uk-overlay-primary .uk-form-icon:hover, +.uk-offcanvas-bar .uk-form-icon:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-button-default, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default, +.uk-card-primary.uk-card-body .uk-button-default, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default, +.uk-card-secondary.uk-card-body .uk-button-default, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default, +.uk-overlay-primary .uk-button-default, +.uk-offcanvas-bar .uk-button-default { + background-color: transparent; + color: #fff; + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-button-default:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-card-primary.uk-card-body .uk-button-default:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default:hover, +.uk-card-secondary.uk-card-body .uk-button-default:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default:hover, +.uk-overlay-primary .uk-button-default:hover, +.uk-offcanvas-bar .uk-button-default:hover { + background-color: transparent; + color: #fff; + border-color: #fff; +} +.uk-light .uk-button-default:active, +.uk-light .uk-button-default.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-card-primary.uk-card-body .uk-button-default:active, +.uk-card-primary.uk-card-body .uk-button-default.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default.uk-active, +.uk-card-secondary.uk-card-body .uk-button-default:active, +.uk-card-secondary.uk-card-body .uk-button-default.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default.uk-active, +.uk-overlay-primary .uk-button-default:active, +.uk-overlay-primary .uk-button-default.uk-active, +.uk-offcanvas-bar .uk-button-default:active, +.uk-offcanvas-bar .uk-button-default.uk-active { + background-color: transparent; + color: #fff; + border-color: #fff; +} +.uk-light .uk-button-primary, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary, +.uk-card-primary.uk-card-body .uk-button-primary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary, +.uk-card-secondary.uk-card-body .uk-button-primary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary, +.uk-overlay-primary .uk-button-primary, +.uk-offcanvas-bar .uk-button-primary { + background-color: #fff; + color: #666; +} +.uk-light .uk-button-primary:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-card-primary.uk-card-body .uk-button-primary:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary:hover, +.uk-card-secondary.uk-card-body .uk-button-primary:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary:hover, +.uk-overlay-primary .uk-button-primary:hover, +.uk-offcanvas-bar .uk-button-primary:hover { + background-color: #f2f2f2; + color: #666; +} +.uk-light .uk-button-primary:active, +.uk-light .uk-button-primary.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-card-primary.uk-card-body .uk-button-primary:active, +.uk-card-primary.uk-card-body .uk-button-primary.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary.uk-active, +.uk-card-secondary.uk-card-body .uk-button-primary:active, +.uk-card-secondary.uk-card-body .uk-button-primary.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary.uk-active, +.uk-overlay-primary .uk-button-primary:active, +.uk-overlay-primary .uk-button-primary.uk-active, +.uk-offcanvas-bar .uk-button-primary:active, +.uk-offcanvas-bar .uk-button-primary.uk-active { + background-color: #e6e6e6; + color: #666; +} +.uk-light .uk-button-secondary, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary, +.uk-card-primary.uk-card-body .uk-button-secondary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary, +.uk-card-secondary.uk-card-body .uk-button-secondary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary, +.uk-overlay-primary .uk-button-secondary, +.uk-offcanvas-bar .uk-button-secondary { + background-color: #fff; + color: #666; +} +.uk-light .uk-button-secondary:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-card-primary.uk-card-body .uk-button-secondary:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary:hover, +.uk-card-secondary.uk-card-body .uk-button-secondary:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary:hover, +.uk-overlay-primary .uk-button-secondary:hover, +.uk-offcanvas-bar .uk-button-secondary:hover { + background-color: #f2f2f2; + color: #666; +} +.uk-light .uk-button-secondary:active, +.uk-light .uk-button-secondary.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-card-primary.uk-card-body .uk-button-secondary:active, +.uk-card-primary.uk-card-body .uk-button-secondary.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary.uk-active, +.uk-card-secondary.uk-card-body .uk-button-secondary:active, +.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary.uk-active, +.uk-overlay-primary .uk-button-secondary:active, +.uk-overlay-primary .uk-button-secondary.uk-active, +.uk-offcanvas-bar .uk-button-secondary:active, +.uk-offcanvas-bar .uk-button-secondary.uk-active { + background-color: #e6e6e6; + color: #666; +} +.uk-light .uk-button-text, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text, +.uk-card-primary.uk-card-body .uk-button-text, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text, +.uk-card-secondary.uk-card-body .uk-button-text, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text, +.uk-overlay-primary .uk-button-text, +.uk-offcanvas-bar .uk-button-text { + color: #fff; +} +.uk-light .uk-button-text::before, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before, +.uk-card-primary.uk-card-body .uk-button-text::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text::before, +.uk-card-secondary.uk-card-body .uk-button-text::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text::before, +.uk-overlay-primary .uk-button-text::before, +.uk-offcanvas-bar .uk-button-text::before { + border-bottom-color: #fff; +} +.uk-light .uk-button-text:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-card-primary.uk-card-body .uk-button-text:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text:hover, +.uk-card-secondary.uk-card-body .uk-button-text:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text:hover, +.uk-overlay-primary .uk-button-text:hover, +.uk-offcanvas-bar .uk-button-text:hover { + color: #fff; +} +.uk-light .uk-button-text:disabled, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-card-primary.uk-card-body .uk-button-text:disabled, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text:disabled, +.uk-card-secondary.uk-card-body .uk-button-text:disabled, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text:disabled, +.uk-overlay-primary .uk-button-text:disabled, +.uk-offcanvas-bar .uk-button-text:disabled { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-button-link, +.uk-section-primary:not(.uk-preserve-color) .uk-button-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link, +.uk-card-primary.uk-card-body .uk-button-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-link, +.uk-card-secondary.uk-card-body .uk-button-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-link, +.uk-overlay-primary .uk-button-link, +.uk-offcanvas-bar .uk-button-link { + color: #fff; +} +.uk-light .uk-button-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-card-primary.uk-card-body .uk-button-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-link:hover, +.uk-card-secondary.uk-card-body .uk-button-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-link:hover, +.uk-overlay-primary .uk-button-link:hover, +.uk-offcanvas-bar .uk-button-link:hover { + color: rgba(255, 255, 255, 0.5); +} +.uk-light.uk-card-badge, +.uk-section-primary:not(.uk-preserve-color).uk-card-badge, +.uk-section-secondary:not(.uk-preserve-color).uk-card-badge, +.uk-tile-primary:not(.uk-preserve-color).uk-card-badge, +.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge, +.uk-card-primary.uk-card-body.uk-card-badge, +.uk-card-primary > :not([class*="uk-card-media"]).uk-card-badge, +.uk-card-secondary.uk-card-body.uk-card-badge, +.uk-card-secondary > :not([class*="uk-card-media"]).uk-card-badge, +.uk-overlay-primary.uk-card-badge, +.uk-offcanvas-bar.uk-card-badge { + background-color: #fff; + color: #666; +} +.uk-light .uk-close, +.uk-section-primary:not(.uk-preserve-color) .uk-close, +.uk-section-secondary:not(.uk-preserve-color) .uk-close, +.uk-tile-primary:not(.uk-preserve-color) .uk-close, +.uk-tile-secondary:not(.uk-preserve-color) .uk-close, +.uk-card-primary.uk-card-body .uk-close, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-close, +.uk-card-secondary.uk-card-body .uk-close, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-close, +.uk-overlay-primary .uk-close, +.uk-offcanvas-bar .uk-close { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-close:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-close:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover, +.uk-card-primary.uk-card-body .uk-close:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-close:hover, +.uk-card-secondary.uk-card-body .uk-close:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-close:hover, +.uk-overlay-primary .uk-close:hover, +.uk-offcanvas-bar .uk-close:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-totop, +.uk-section-primary:not(.uk-preserve-color) .uk-totop, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop, +.uk-card-primary.uk-card-body .uk-totop, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop, +.uk-card-secondary.uk-card-body .uk-totop, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop, +.uk-overlay-primary .uk-totop, +.uk-offcanvas-bar .uk-totop { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-totop:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover, +.uk-card-primary.uk-card-body .uk-totop:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop:hover, +.uk-card-secondary.uk-card-body .uk-totop:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop:hover, +.uk-overlay-primary .uk-totop:hover, +.uk-offcanvas-bar .uk-totop:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-totop:active, +.uk-section-primary:not(.uk-preserve-color) .uk-totop:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active, +.uk-card-primary.uk-card-body .uk-totop:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop:active, +.uk-card-secondary.uk-card-body .uk-totop:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop:active, +.uk-overlay-primary .uk-totop:active, +.uk-offcanvas-bar .uk-totop:active { + color: #fff; +} +.uk-light .uk-marker, +.uk-section-primary:not(.uk-preserve-color) .uk-marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-marker, +.uk-card-primary.uk-card-body .uk-marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-marker, +.uk-card-secondary.uk-card-body .uk-marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-marker, +.uk-overlay-primary .uk-marker, +.uk-offcanvas-bar .uk-marker { + background: #f8f8f8; + color: #666; +} +.uk-light .uk-marker:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover, +.uk-card-primary.uk-card-body .uk-marker:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-marker:hover, +.uk-card-secondary.uk-card-body .uk-marker:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-marker:hover, +.uk-overlay-primary .uk-marker:hover, +.uk-offcanvas-bar .uk-marker:hover { + color: #666; +} +.uk-light .uk-badge, +.uk-section-primary:not(.uk-preserve-color) .uk-badge, +.uk-section-secondary:not(.uk-preserve-color) .uk-badge, +.uk-tile-primary:not(.uk-preserve-color) .uk-badge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-badge, +.uk-card-primary.uk-card-body .uk-badge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-badge, +.uk-card-secondary.uk-card-body .uk-badge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-badge, +.uk-overlay-primary .uk-badge, +.uk-offcanvas-bar .uk-badge { + background-color: #fff; + color: #666 !important; +} +.uk-light .uk-label, +.uk-section-primary:not(.uk-preserve-color) .uk-label, +.uk-section-secondary:not(.uk-preserve-color) .uk-label, +.uk-tile-primary:not(.uk-preserve-color) .uk-label, +.uk-tile-secondary:not(.uk-preserve-color) .uk-label, +.uk-card-primary.uk-card-body .uk-label, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-label, +.uk-card-secondary.uk-card-body .uk-label, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-label, +.uk-overlay-primary .uk-label, +.uk-offcanvas-bar .uk-label { + background-color: #fff; + color: #666; +} +.uk-light .uk-article-meta, +.uk-section-primary:not(.uk-preserve-color) .uk-article-meta, +.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta, +.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta, +.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta, +.uk-card-primary.uk-card-body .uk-article-meta, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-article-meta, +.uk-card-secondary.uk-card-body .uk-article-meta, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-article-meta, +.uk-overlay-primary .uk-article-meta, +.uk-offcanvas-bar .uk-article-meta { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-input, +.uk-overlay-primary .uk-search-input, +.uk-offcanvas-bar .uk-search-input { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-search-input::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-card-primary.uk-card-body .uk-search-input::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-input::placeholder, +.uk-card-secondary.uk-card-body .uk-search-input::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-input::placeholder, +.uk-overlay-primary .uk-search-input::placeholder, +.uk-offcanvas-bar .uk-search-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search .uk-search-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-card-primary.uk-card-body .uk-search .uk-search-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon, +.uk-card-secondary.uk-card-body .uk-search .uk-search-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon, +.uk-overlay-primary .uk-search .uk-search-icon, +.uk-offcanvas-bar .uk-search .uk-search-icon { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search .uk-search-icon:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon:hover, +.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon:hover, +.uk-overlay-primary .uk-search .uk-search-icon:hover, +.uk-offcanvas-bar .uk-search .uk-search-icon:hover { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-default .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-default .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input, +.uk-overlay-primary .uk-search-default .uk-search-input, +.uk-offcanvas-bar .uk-search-default .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-default .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input:focus, +.uk-overlay-primary .uk-search-default .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-default .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-navbar .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input, +.uk-overlay-primary .uk-search-navbar .uk-search-input, +.uk-offcanvas-bar .uk-search-navbar .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-navbar .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input:focus, +.uk-overlay-primary .uk-search-navbar .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-navbar .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-medium .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input, +.uk-overlay-primary .uk-search-medium .uk-search-input, +.uk-offcanvas-bar .uk-search-medium .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-medium .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input:focus, +.uk-overlay-primary .uk-search-medium .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-medium .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-large .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-large .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input, +.uk-overlay-primary .uk-search-large .uk-search-input, +.uk-offcanvas-bar .uk-search-large .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-large .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-large .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input:focus, +.uk-overlay-primary .uk-search-large .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-large .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-toggle, +.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle, +.uk-card-primary.uk-card-body .uk-search-toggle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-toggle, +.uk-card-secondary.uk-card-body .uk-search-toggle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-toggle, +.uk-overlay-primary .uk-search-toggle, +.uk-offcanvas-bar .uk-search-toggle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-toggle:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-card-primary.uk-card-body .uk-search-toggle:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-toggle:hover, +.uk-card-secondary.uk-card-body .uk-search-toggle:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-toggle:hover, +.uk-overlay-primary .uk-search-toggle:hover, +.uk-offcanvas-bar .uk-search-toggle:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-accordion-title, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title, +.uk-card-primary.uk-card-body .uk-accordion-title, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title, +.uk-card-secondary.uk-card-body .uk-accordion-title, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title, +.uk-overlay-primary .uk-accordion-title, +.uk-offcanvas-bar .uk-accordion-title { + color: #fff; +} +.uk-light .uk-accordion-title:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-card-primary.uk-card-body .uk-accordion-title:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title:hover, +.uk-card-secondary.uk-card-body .uk-accordion-title:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title:hover, +.uk-overlay-primary .uk-accordion-title:hover, +.uk-offcanvas-bar .uk-accordion-title:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-thumbnav > * > *::after, +.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-card-primary.uk-card-body .uk-thumbnav > * > *::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-thumbnav > * > *::after, +.uk-card-secondary.uk-card-body .uk-thumbnav > * > *::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-thumbnav > * > *::after, +.uk-overlay-primary .uk-thumbnav > * > *::after, +.uk-offcanvas-bar .uk-thumbnav > * > *::after { + background-image: linear-gradient(-180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.4)); +} +.uk-light .uk-iconnav > * > a, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-card-primary.uk-card-body .uk-iconnav > * > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > * > a, +.uk-card-secondary.uk-card-body .uk-iconnav > * > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > * > a, +.uk-overlay-primary .uk-iconnav > * > a, +.uk-offcanvas-bar .uk-iconnav > * > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-iconnav > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-card-primary.uk-card-body .uk-iconnav > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > * > a:hover, +.uk-card-secondary.uk-card-body .uk-iconnav > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > * > a:hover, +.uk-overlay-primary .uk-iconnav > * > a:hover, +.uk-offcanvas-bar .uk-iconnav > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-iconnav > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-card-primary.uk-card-body .uk-iconnav > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-iconnav > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > .uk-active > a, +.uk-overlay-primary .uk-iconnav > .uk-active > a, +.uk-offcanvas-bar .uk-iconnav > .uk-active > a { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-grid-divider > :not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-overlay-primary .uk-grid-divider > :not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-grid-divider > :not(.uk-first-column)::before { + border-right-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-overlay-primary .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-default > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-card-primary.uk-card-body .uk-nav-default > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li > a, +.uk-card-secondary.uk-card-body .uk-nav-default > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li > a, +.uk-overlay-primary .uk-nav-default > li > a, +.uk-offcanvas-bar .uk-nav-default > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-default > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-default > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-default > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li > a:hover, +.uk-overlay-primary .uk-nav-default > li > a:hover, +.uk-offcanvas-bar .uk-nav-default > li > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-default > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-default > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-default > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li.uk-active > a, +.uk-overlay-primary .uk-nav-default > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-default > li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-default .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-header, +.uk-overlay-primary .uk-nav-default .uk-nav-header, +.uk-offcanvas-bar .uk-nav-default .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-default .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-divider, +.uk-overlay-primary .uk-nav-default .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-default .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-default .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a, +.uk-overlay-primary .uk-nav-default .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-default .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-primary > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-card-primary.uk-card-body .uk-nav-primary > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a, +.uk-card-secondary.uk-card-body .uk-nav-primary > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a, +.uk-overlay-primary .uk-nav-primary > li > a, +.uk-offcanvas-bar .uk-nav-primary > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-primary > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-primary > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-primary > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a:hover, +.uk-overlay-primary .uk-nav-primary > li > a:hover, +.uk-offcanvas-bar .uk-nav-primary > li > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-primary > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-primary > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-primary > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li.uk-active > a, +.uk-overlay-primary .uk-nav-primary > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-primary > li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-primary .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-header, +.uk-overlay-primary .uk-nav-primary .uk-nav-header, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-primary .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-divider, +.uk-overlay-primary .uk-nav-primary .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-primary .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-primary .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-secondary > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a, +.uk-overlay-primary .uk-nav-secondary > li > a, +.uk-offcanvas-bar .uk-nav-secondary > li > a { + color: #fff; +} +.uk-light .uk-nav-secondary > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover, +.uk-overlay-primary .uk-nav-secondary > li > a:hover, +.uk-offcanvas-bar .uk-nav-secondary > li > a:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-nav-secondary > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-secondary > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a, +.uk-overlay-primary .uk-nav-secondary > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-secondary > li.uk-active > a { + color: #fff; + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-nav-secondary .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary > li > a:hover .uk-nav-subtitle { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle { + color: #fff; +} +.uk-light .uk-nav-secondary .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-header, +.uk-overlay-primary .uk-nav-secondary .uk-nav-header, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-secondary .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-divider, +.uk-overlay-primary .uk-nav-secondary .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-secondary .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-secondary .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-overlay-primary .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-offcanvas-bar .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-navbar-nav > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a, +.uk-overlay-primary .uk-navbar-nav > li > a, +.uk-offcanvas-bar .uk-navbar-nav > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-navbar-nav > li:hover > a, +.uk-light .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-primary.uk-card-body .uk-navbar-nav > li:hover > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li:hover > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-secondary.uk-card-body .uk-navbar-nav > li:hover > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li:hover > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-overlay-primary .uk-navbar-nav > li:hover > a, +.uk-overlay-primary .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-offcanvas-bar .uk-navbar-nav > li:hover > a, +.uk-offcanvas-bar .uk-navbar-nav > li > a[aria-expanded="true"] { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-navbar-nav > li > a:active, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a:active, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a:active, +.uk-overlay-primary .uk-navbar-nav > li > a:active, +.uk-offcanvas-bar .uk-navbar-nav > li > a:active { + color: #fff; +} +.uk-light .uk-navbar-nav > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li.uk-active > a, +.uk-overlay-primary .uk-navbar-nav > li.uk-active > a, +.uk-offcanvas-bar .uk-navbar-nav > li.uk-active > a { + color: #fff; +} +.uk-light .uk-navbar-item, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item, +.uk-card-primary.uk-card-body .uk-navbar-item, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-item, +.uk-card-secondary.uk-card-body .uk-navbar-item, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-item, +.uk-overlay-primary .uk-navbar-item, +.uk-offcanvas-bar .uk-navbar-item { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-navbar-toggle, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-card-primary.uk-card-body .uk-navbar-toggle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle, +.uk-card-secondary.uk-card-body .uk-navbar-toggle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle, +.uk-overlay-primary .uk-navbar-toggle, +.uk-offcanvas-bar .uk-navbar-toggle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-navbar-toggle:hover, +.uk-light .uk-navbar-toggle[aria-expanded="true"], +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-card-primary.uk-card-body .uk-navbar-toggle:hover, +.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded="true"], +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle[aria-expanded="true"], +.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover, +.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded="true"], +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle[aria-expanded="true"], +.uk-overlay-primary .uk-navbar-toggle:hover, +.uk-overlay-primary .uk-navbar-toggle[aria-expanded="true"], +.uk-offcanvas-bar .uk-navbar-toggle:hover, +.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded="true"] { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav > * > :first-child, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-card-primary.uk-card-body .uk-subnav > * > :first-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > * > :first-child, +.uk-card-secondary.uk-card-body .uk-subnav > * > :first-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > * > :first-child, +.uk-overlay-primary .uk-subnav > * > :first-child, +.uk-offcanvas-bar .uk-subnav > * > :first-child { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-subnav > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-card-primary.uk-card-body .uk-subnav > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > * > a:hover, +.uk-card-secondary.uk-card-body .uk-subnav > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > * > a:hover, +.uk-overlay-primary .uk-subnav > * > a:hover, +.uk-offcanvas-bar .uk-subnav > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-card-primary.uk-card-body .uk-subnav > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-subnav > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > .uk-active > a, +.uk-overlay-primary .uk-subnav > .uk-active > a, +.uk-offcanvas-bar .uk-subnav > .uk-active > a { + color: #fff; +} +.uk-light .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-overlay-primary .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before { + border-right-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-subnav-pill > * > :first-child, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > :first-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > :first-child, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > :first-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > :first-child, +.uk-overlay-primary .uk-subnav-pill > * > :first-child, +.uk-offcanvas-bar .uk-subnav-pill > * > :first-child { + background-color: transparent; + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-subnav-pill > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:hover, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:hover, +.uk-overlay-primary .uk-subnav-pill > * > a:hover, +.uk-offcanvas-bar .uk-subnav-pill > * > a:hover { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav-pill > * > a:active, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > a:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:active, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > a:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:active, +.uk-overlay-primary .uk-subnav-pill > * > a:active, +.uk-offcanvas-bar .uk-subnav-pill > * > a:active { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav-pill > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-card-primary.uk-card-body .uk-subnav-pill > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-subnav-pill > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > .uk-active > a, +.uk-overlay-primary .uk-subnav-pill > .uk-active > a, +.uk-offcanvas-bar .uk-subnav-pill > .uk-active > a { + background-color: #fff; + color: #666; +} +.uk-light .uk-subnav > .uk-disabled > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-card-primary.uk-card-body .uk-subnav > .uk-disabled > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > .uk-disabled > a, +.uk-card-secondary.uk-card-body .uk-subnav > .uk-disabled > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > .uk-disabled > a, +.uk-overlay-primary .uk-subnav > .uk-disabled > a, +.uk-offcanvas-bar .uk-subnav > .uk-disabled > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-breadcrumb > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-card-primary.uk-card-body .uk-breadcrumb > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > *, +.uk-card-secondary.uk-card-body .uk-breadcrumb > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > *, +.uk-overlay-primary .uk-breadcrumb > * > *, +.uk-offcanvas-bar .uk-breadcrumb > * > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-breadcrumb > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-card-primary.uk-card-body .uk-breadcrumb > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > :hover, +.uk-card-secondary.uk-card-body .uk-breadcrumb > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > :hover, +.uk-overlay-primary .uk-breadcrumb > * > :hover, +.uk-offcanvas-bar .uk-breadcrumb > * > :hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-breadcrumb > :last-child > *, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-card-primary.uk-card-body .uk-breadcrumb > :last-child > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > :last-child > *, +.uk-card-secondary.uk-card-body .uk-breadcrumb > :last-child > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > :last-child > *, +.uk-overlay-primary .uk-breadcrumb > :last-child > *, +.uk-offcanvas-bar .uk-breadcrumb > :last-child > * { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-overlay-primary .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-pagination > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-card-primary.uk-card-body .uk-pagination > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > * > *, +.uk-card-secondary.uk-card-body .uk-pagination > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > * > *, +.uk-overlay-primary .uk-pagination > * > *, +.uk-offcanvas-bar .uk-pagination > * > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-pagination > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-card-primary.uk-card-body .uk-pagination > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > * > :hover, +.uk-card-secondary.uk-card-body .uk-pagination > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > * > :hover, +.uk-overlay-primary .uk-pagination > * > :hover, +.uk-offcanvas-bar .uk-pagination > * > :hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-pagination > .uk-active > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-card-primary.uk-card-body .uk-pagination > .uk-active > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > .uk-active > *, +.uk-card-secondary.uk-card-body .uk-pagination > .uk-active > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > .uk-active > *, +.uk-overlay-primary .uk-pagination > .uk-active > *, +.uk-offcanvas-bar .uk-pagination > .uk-active > * { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-pagination > .uk-disabled > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-card-primary.uk-card-body .uk-pagination > .uk-disabled > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > .uk-disabled > *, +.uk-card-secondary.uk-card-body .uk-pagination > .uk-disabled > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > .uk-disabled > *, +.uk-overlay-primary .uk-pagination > .uk-disabled > *, +.uk-offcanvas-bar .uk-pagination > .uk-disabled > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-tab::before, +.uk-section-primary:not(.uk-preserve-color) .uk-tab::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before, +.uk-card-primary.uk-card-body .uk-tab::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab::before, +.uk-card-secondary.uk-card-body .uk-tab::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab::before, +.uk-overlay-primary .uk-tab::before, +.uk-offcanvas-bar .uk-tab::before { + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-tab > * > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-card-primary.uk-card-body .uk-tab > * > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > * > a, +.uk-card-secondary.uk-card-body .uk-tab > * > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > * > a, +.uk-overlay-primary .uk-tab > * > a, +.uk-offcanvas-bar .uk-tab > * > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-tab > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-card-primary.uk-card-body .uk-tab > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > * > a:hover, +.uk-card-secondary.uk-card-body .uk-tab > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > * > a:hover, +.uk-overlay-primary .uk-tab > * > a:hover, +.uk-offcanvas-bar .uk-tab > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-tab > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-card-primary.uk-card-body .uk-tab > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-tab > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > .uk-active > a, +.uk-overlay-primary .uk-tab > .uk-active > a, +.uk-offcanvas-bar .uk-tab > .uk-active > a { + color: #fff; + border-color: #fff; +} +.uk-light .uk-tab > .uk-disabled > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-card-primary.uk-card-body .uk-tab > .uk-disabled > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > .uk-disabled > a, +.uk-card-secondary.uk-card-body .uk-tab > .uk-disabled > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > .uk-disabled > a, +.uk-overlay-primary .uk-tab > .uk-disabled > a, +.uk-offcanvas-bar .uk-tab > .uk-disabled > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-slidenav, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav, +.uk-card-primary.uk-card-body .uk-slidenav, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav, +.uk-card-secondary.uk-card-body .uk-slidenav, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav, +.uk-overlay-primary .uk-slidenav, +.uk-offcanvas-bar .uk-slidenav { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-slidenav:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-card-primary.uk-card-body .uk-slidenav:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav:hover, +.uk-card-secondary.uk-card-body .uk-slidenav:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav:hover, +.uk-overlay-primary .uk-slidenav:hover, +.uk-offcanvas-bar .uk-slidenav:hover { + color: rgba(255, 255, 255, 0.95); +} +.uk-light .uk-slidenav:active, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-card-primary.uk-card-body .uk-slidenav:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav:active, +.uk-card-secondary.uk-card-body .uk-slidenav:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav:active, +.uk-overlay-primary .uk-slidenav:active, +.uk-offcanvas-bar .uk-slidenav:active { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-dotnav > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-card-primary.uk-card-body .uk-dotnav > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > *, +.uk-card-secondary.uk-card-body .uk-dotnav > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > *, +.uk-overlay-primary .uk-dotnav > * > *, +.uk-offcanvas-bar .uk-dotnav > * > * { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.9); +} +.uk-light .uk-dotnav > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-card-primary.uk-card-body .uk-dotnav > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > :hover, +.uk-card-secondary.uk-card-body .uk-dotnav > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > :hover, +.uk-overlay-primary .uk-dotnav > * > :hover, +.uk-offcanvas-bar .uk-dotnav > * > :hover { + background-color: rgba(255, 255, 255, 0.9); + border-color: transparent; +} +.uk-light .uk-dotnav > * > :active, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-card-primary.uk-card-body .uk-dotnav > * > :active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > :active, +.uk-card-secondary.uk-card-body .uk-dotnav > * > :active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > :active, +.uk-overlay-primary .uk-dotnav > * > :active, +.uk-offcanvas-bar .uk-dotnav > * > :active { + background-color: rgba(255, 255, 255, 0.5); + border-color: transparent; +} +.uk-light .uk-dotnav > .uk-active > *, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-card-primary.uk-card-body .uk-dotnav > .uk-active > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > .uk-active > *, +.uk-card-secondary.uk-card-body .uk-dotnav > .uk-active > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > .uk-active > *, +.uk-overlay-primary .uk-dotnav > .uk-active > *, +.uk-offcanvas-bar .uk-dotnav > .uk-active > * { + background-color: rgba(255, 255, 255, 0.9); + border-color: transparent; +} +.uk-light .uk-text-lead, +.uk-section-primary:not(.uk-preserve-color) .uk-text-lead, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead, +.uk-card-primary.uk-card-body .uk-text-lead, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-lead, +.uk-card-secondary.uk-card-body .uk-text-lead, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-lead, +.uk-overlay-primary .uk-text-lead, +.uk-offcanvas-bar .uk-text-lead { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-text-meta, +.uk-section-primary:not(.uk-preserve-color) .uk-text-meta, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta, +.uk-card-primary.uk-card-body .uk-text-meta, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-meta, +.uk-card-secondary.uk-card-body .uk-text-meta, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-meta, +.uk-overlay-primary .uk-text-meta, +.uk-offcanvas-bar .uk-text-meta { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-text-muted, +.uk-section-primary:not(.uk-preserve-color) .uk-text-muted, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted, +.uk-card-primary.uk-card-body .uk-text-muted, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-muted, +.uk-card-secondary.uk-card-body .uk-text-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-muted, +.uk-overlay-primary .uk-text-muted, +.uk-offcanvas-bar .uk-text-muted { + color: rgba(255, 255, 255, 0.5) !important; +} +.uk-light .uk-text-emphasis, +.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-card-primary.uk-card-body .uk-text-emphasis, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-emphasis, +.uk-card-secondary.uk-card-body .uk-text-emphasis, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-emphasis, +.uk-overlay-primary .uk-text-emphasis, +.uk-offcanvas-bar .uk-text-emphasis { + color: #fff !important; +} +.uk-light .uk-text-primary, +.uk-section-primary:not(.uk-preserve-color) .uk-text-primary, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary, +.uk-card-primary.uk-card-body .uk-text-primary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-primary, +.uk-card-secondary.uk-card-body .uk-text-primary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-primary, +.uk-overlay-primary .uk-text-primary, +.uk-offcanvas-bar .uk-text-primary { + color: #fff !important; +} +.uk-light .uk-text-secondary, +.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary, +.uk-card-primary.uk-card-body .uk-text-secondary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-secondary, +.uk-card-secondary.uk-card-body .uk-text-secondary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-secondary, +.uk-overlay-primary .uk-text-secondary, +.uk-offcanvas-bar .uk-text-secondary { + color: #fff !important; +} +.uk-light .uk-column-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-column-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider, +.uk-card-primary.uk-card-body .uk-column-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-column-divider, +.uk-card-secondary.uk-card-body .uk-column-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-column-divider, +.uk-overlay-primary .uk-column-divider, +.uk-offcanvas-bar .uk-column-divider { + column-rule-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-logo, +.uk-section-primary:not(.uk-preserve-color) .uk-logo, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo, +.uk-card-primary.uk-card-body .uk-logo, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo, +.uk-card-secondary.uk-card-body .uk-logo, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo, +.uk-overlay-primary .uk-logo, +.uk-offcanvas-bar .uk-logo { + color: #fff; +} +.uk-light .uk-logo:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover, +.uk-card-primary.uk-card-body .uk-logo:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo:hover, +.uk-card-secondary.uk-card-body .uk-logo:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo:hover, +.uk-overlay-primary .uk-logo:hover, +.uk-offcanvas-bar .uk-logo:hover { + color: #fff; +} +.uk-light .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-section-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-section-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-tile-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-primary.uk-card-body .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-secondary.uk-card-body .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-overlay-primary .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-offcanvas-bar .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse) { + display: none; +} +.uk-light .uk-logo-inverse, +.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-card-primary.uk-card-body .uk-logo-inverse, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo-inverse, +.uk-card-secondary.uk-card-body .uk-logo-inverse, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo-inverse, +.uk-overlay-primary .uk-logo-inverse, +.uk-offcanvas-bar .uk-logo-inverse { + display: block; +} +.uk-light .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-primary.uk-card-body .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-secondary.uk-card-body .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-overlay-primary .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-offcanvas-bar .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-accordion-title::before, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-card-primary.uk-card-body .uk-accordion-title::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title::before, +.uk-card-secondary.uk-card-body .uk-accordion-title::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title::before, +.uk-overlay-primary .uk-accordion-title::before, +.uk-offcanvas-bar .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-open > .uk-accordion-title::before, +.uk-section-primary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-card-primary.uk-card-body .uk-open > .uk-accordion-title::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-open > .uk-accordion-title::before, +.uk-card-secondary.uk-card-body .uk-open > .uk-accordion-title::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-open > .uk-accordion-title::before, +.uk-overlay-primary .uk-open > .uk-accordion-title::before, +.uk-offcanvas-bar .uk-open > .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* + * Pass dropbar behind color to JS + */ +* { + --uk-inverse: initial; +} +.uk-light, +.uk-section-primary:not(.uk-preserve-color), +.uk-section-secondary:not(.uk-preserve-color), +.uk-tile-primary:not(.uk-preserve-color), +.uk-tile-secondary:not(.uk-preserve-color), +.uk-card-primary.uk-card-body, +.uk-card-primary > :not([class*="uk-card-media"]), +.uk-card-secondary.uk-card-body, +.uk-card-secondary > :not([class*="uk-card-media"]), +.uk-overlay-primary, +.uk-offcanvas-bar { + --uk-inverse: light; +} +.uk-dark, +.uk-section-default:not(.uk-preserve-color), +.uk-section-muted:not(.uk-preserve-color), +.uk-tile-default:not(.uk-preserve-color), +.uk-tile-muted:not(.uk-preserve-color), +.uk-card-default.uk-card-body, +.uk-card-default > :not([class*="uk-card-media"]), +.uk-overlay-default, +.uk-dropbar, +.uk-navbar-container:not(.uk-navbar-transparent), +.uk-navbar-dropdown, +.uk-dropdown { + --uk-inverse: dark; +} +.uk-inverse-light { + --uk-inverse: light !important; +} +.uk-inverse-dark { + --uk-inverse: dark !important; +} +/* ======================================================================== + Component: Print + ========================================================================== */ +@media print { + *, + *::before, + *::after { + background: transparent !important; + color: black !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} diff --git a/web/static/uikit/css/uikit-rtl.min.css b/web/static/uikit/css/uikit-rtl.min.css new file mode 100644 index 0000000..35189ed --- /dev/null +++ b/web/static/uikit/css/uikit-rtl.min.css @@ -0,0 +1 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:400;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}.uk-link,a{color:#1e87f0;text-decoration:none;cursor:pointer}.uk-link-toggle:hover .uk-link,.uk-link:hover,a:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}address,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 20px 0}*+address,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:20px}.uk-h1,.uk-h2,.uk-h3,.uk-h4,.uk-h5,.uk-h6,.uk-heading-2xlarge,.uk-heading-3xlarge,.uk-heading-large,.uk-heading-medium,.uk-heading-small,.uk-heading-xlarge,h1,h2,h3,h4,h5,h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:400;color:#333;text-transform:none}*+.uk-h1,*+.uk-h2,*+.uk-h3,*+.uk-h4,*+.uk-h5,*+.uk-h6,*+.uk-heading-2xlarge,*+.uk-heading-3xlarge,*+.uk-heading-large,*+.uk-heading-medium,*+.uk-heading-small,*+.uk-heading-xlarge,*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:40px}.uk-h1,h1{font-size:2.23125rem;line-height:1.2}.uk-h2,h2{font-size:1.7rem;line-height:1.3}.uk-h3,h3{font-size:1.5rem;line-height:1.4}.uk-h4,h4{font-size:1.25rem;line-height:1.4}.uk-h5,h5{font-size:16px;line-height:1.4}.uk-h6,h6{font-size:.875rem;line-height:1.4}@media (min-width:960px){.uk-h1,h1{font-size:2.625rem}.uk-h2,h2{font-size:2rem}}ol,ul{padding-right:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-right:0}.uk-hr,hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+.uk-hr,*+hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:0.875rem/1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:0}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s:640px;--uk-breakpoint-m:960px;--uk-breakpoint-l:1200px;--uk-breakpoint-xl:1600px}.uk-link-muted a,.uk-link-toggle .uk-link-muted,a.uk-link-muted{color:#999}.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted,a.uk-link-muted:hover{color:#666}.uk-link-text a,.uk-link-toggle .uk-link-text,a.uk-link-text{color:inherit}.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text,a.uk-link-text:hover{color:#999}.uk-link-heading a,.uk-link-toggle .uk-link-heading,a.uk-link-heading{color:inherit}.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading,a.uk-link-heading:hover{color:#1e87f0;text-decoration:none}.uk-link-reset a,a.uk-link-reset{color:inherit!important;text-decoration:none!important}.uk-link-toggle{color:inherit!important;text-decoration:none!important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}.uk-heading-3xlarge{font-size:8rem;line-height:1}@media (min-width:960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}.uk-heading-3xlarge{font-size:11rem}}@media (min-width:1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}.uk-heading-3xlarge{font-size:15rem}}.uk-heading-divider{padding-bottom:calc(5px + .1em);border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-.1 * 1em);vertical-align:middle;height:calc(4px + .7em);margin-left:calc(5px + .2em);border-right:calc(5px + .1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::after,.uk-heading-line>::before{content:"";position:absolute;top:calc(50% - (calc(.2px + .05em)/ 2));width:2000px;border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-line>::before{left:100%;margin-left:calc(5px + .3em)}.uk-heading-line>::after{right:100%;margin-right:calc(5px + .3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::after,.uk-divider-icon::before{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{left:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{right:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-right:auto;margin-left:auto;border-right:1px solid #e5e5e5}.uk-list{padding:0;list-style:none}.uk-list>*{break-inside:avoid-column}.uk-list>*>:last-child{margin-bottom:0}.uk-list>*>ul,.uk-list>:nth-child(n+2){margin-top:10px}.uk-list-circle,.uk-list-decimal,.uk-list-disc,.uk-list-hyphen,.uk-list-square{padding-right:30px}.uk-list-disc{list-style-type:disc}.uk-list-circle{list-style-type:circle}.uk-list-square{list-style-type:square}.uk-list-decimal{list-style-type:decimal}.uk-list-hyphen{list-style-type:'– '}.uk-list-muted>::marker{color:#999!important}.uk-list-emphasis>::marker{color:#333!important}.uk-list-primary>::marker{color:#1e87f0!important}.uk-list-secondary>::marker{color:#222!important}.uk-list-bullet>*{position:relative;padding-right:30px}.uk-list-bullet>::before{content:"";position:absolute;top:0;right:0;width:30px;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>*>ul,.uk-list-large>:nth-child(n+2){margin-top:20px}.uk-list-collapse>*>ul,.uk-list-collapse>:nth-child(n+2){margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-collapse.uk-list-striped>:nth-child(n+2),.uk-list-large.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:400;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:right;vertical-align:bottom;font-size:.875rem;font-weight:400;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:right;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-divider>:first-child>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped tbody tr:nth-of-type(odd),.uk-table-striped>tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover tbody tr:hover,.uk-table-hover>tr:hover{background:#ffd}.uk-table tbody tr.uk-active,.uk-table>tr.uk-active{background:#ffd}.uk-table-small td,.uk-table-small th{padding:10px 12px}.uk-table-large td,.uk-table-large th{padding:22px 12px}.uk-table-justify td:first-child,.uk-table-justify th:first-child{padding-right:0}.uk-table-justify td:last-child,.uk-table-justify th:last-child{padding-left:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0!important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width:959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive td,.uk-table-responsive th,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive td,.uk-table-responsive th{width:auto!important;max-width:none!important;min-width:0!important;overflow:visible!important;white-space:normal!important}.uk-table-responsive .uk-table-link:not(:first-child)>a,.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive th:not(:first-child):not(.uk-table-link){padding-top:5px!important}.uk-table-responsive .uk-table-link:not(:last-child)>a,.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive th:not(:last-child):not(.uk-table-link){padding-bottom:5px!important}.uk-table-justify.uk-table-responsive td,.uk-table-justify.uk-table-responsive th{padding-right:0;padding-left:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-table-striped>tr:nth-of-type(2n):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0,0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none!important}.uk-icon-link:hover{color:#666}.uk-active>.uk-icon-link,.uk-icon-link:active{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:.1s ease-in-out;transition-property:color,background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-active>.uk-icon-button,.uk-icon-button:active{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:0 0}.uk-range:focus{outline:0}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:active::-webkit-slider-runnable-track,.uk-range:focus::-webkit-slider-runnable-track{background:#dedede}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dedede}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-checkbox,.uk-input,.uk-radio,.uk-select,.uk-textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:700}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input[type=date]::-webkit-datetime-edit,.uk-input[type=datetime-local]::-webkit-datetime-edit,.uk-input[type=time]::-webkit-datetime-edit{display:inline-flex;align-items:center;height:100%;padding:0}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-checkbox:not(:disabled),.uk-radio:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0;min-width:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:0;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-right:8px;padding-left:8px}[multiple].uk-form-small,[size].uk-form-small,textarea.uk-form-small{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-right:12px;padding-left:12px}[multiple].uk-form-large,[size].uk-form-large,textarea.uk-form-large{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:0 0;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-left:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:0 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-left:20px;background-repeat:no-repeat;background-position:0 50%}.uk-input[list]:focus,.uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none!important}.uk-checkbox,.uk-radio{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-checkbox:focus,.uk-radio:focus{background-color:rgba(0,0,0,0);outline:0;border-color:#1e87f0}.uk-checkbox:checked,.uk-checkbox:indeterminate,.uk-radio:checked{background-color:#1e87f0;border-color:transparent}.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus,.uk-radio:checked:focus{background-color:#0e6dcd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled,.uk-radio:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom input[type=file],.uk-form-custom select{position:absolute;top:0;z-index:1;width:100%;height:100%;right:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:right}.uk-form-horizontal .uk-form-controls{margin-right:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;right:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-right:40px!important}.uk-form-icon-flip{left:0;right:auto}.uk-form-icon-flip~.uk-input{padding-left:40px!important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color,border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:transparent;color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:transparent;color:#333;border-color:#b2b2b2}.uk-button-default.uk-active,.uk-button-default:active{background-color:transparent;color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover{background-color:#0f7ae5;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0e6dcd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover{background-color:#151515;color:#fff}.uk-button-secondary.uk-active,.uk-button-secondary:active{background-color:#080808;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#ec2147;color:#fff}.uk-button-danger:disabled,.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled{background-color:transparent;color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:0 0;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;right:0;left:100%;border-bottom:1px solid currentColor;transition:left .3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{left:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:0 0;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-right:-1px}.uk-button-group .uk-button.uk-active,.uk-button-group .uk-button:active,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:hover{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:transparent}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0;transition:width .6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width:960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{--uk-inverse:dark;background:#fff}.uk-section-muted{--uk-inverse:dark;background:#f8f8f8}.uk-section-primary{--uk-inverse:light;background:#1e87f0}.uk-section-secondary{--uk-inverse:light;background:#222}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-right:auto;margin-left:auto;padding-right:15px;padding-left:15px}@media (min-width:640px){.uk-container{padding-right:30px;padding-left:30px}}@media (min-width:960px){.uk-container{padding-right:40px;padding-left:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-right:0;padding-left:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-right{margin-right:0}.uk-container-expand-left{margin-left:0}@media (min-width:640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width:960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-right{margin-right:-15px}.uk-container-item-padding-remove-left{margin-left:-15px}@media (min-width:640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-right{margin-right:-30px}.uk-container-item-padding-remove-left{margin-left:-30px}}@media (min-width:960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-right{margin-right:-40px}.uk-container-item-padding-remove-left{margin-left:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-right:15px;padding-left:15px;padding-top:40px;padding-bottom:40px}@media (min-width:640px){.uk-tile{padding-right:30px;padding-left:30px}}@media (min-width:960px){.uk-tile{padding-right:40px;padding-left:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{--uk-inverse:dark;background-color:#fff}.uk-tile-muted{--uk-inverse:dark;background-color:#f8f8f8}.uk-tile-primary{--uk-inverse:light;background-color:#1e87f0}.uk-tile-secondary{--uk-inverse:light;background-color:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow .1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width:1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-footer>:last-child,.uk-card-header>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;left:15px;z-index:1;height:22px;padding:0 10px;background:#1e87f0;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default{--uk-inverse:dark;background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{--uk-inverse:light;background-color:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-secondary{--uk-inverse:light;background-color:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-small .uk-card-body,.uk-card-small.uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width:1200px){.uk-card-large .uk-card-body,.uk-card-large.uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-right:-30px;margin-left:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default .uk-nav-divider,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default>li>a{padding-right:30px;padding-left:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-right:45px}@media (min-width:1200px){.uk-card-body>.uk-nav-default{margin-right:-40px;margin-left:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default .uk-nav-divider,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default>li>a{padding-right:40px;padding-left:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-right:55px}}.uk-card-small>.uk-nav-default{margin-right:-20px;margin-left:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default .uk-nav-divider,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default>li>a{padding-right:20px;padding-left:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-right:35px}@media (min-width:1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default .uk-nav-divider,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default>li>a{padding-right:0;padding-left:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-right:15px}}.uk-close{color:#999;transition:.1s ease-in-out;transition-property:color,opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0)}100%{transform:rotate(-270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:-88px}50%{stroke-dashoffset:-22px;transform:rotate(-135deg)}100%{stroke-dashoffset:-88px;transform:rotate(-450deg)}}.uk-totop{padding:5px;color:#999;transition:color .1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 15px 15px 29px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;left:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fff6ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:0 0;border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff!important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{--uk-inverse:dark;background:rgba(255,255,255,.8)}.uk-overlay-primary{--uk-inverse:light;background:rgba(34,34,34,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width:960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-right:30px;list-style:none}@media (min-width:960px){.uk-comment-list .uk-comment~ul{padding-right:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:0}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;right:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{left:0;right:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-right:10px;padding-left:10px;background:0 0;border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-default .uk-search-icon{padding-right:10px;padding-left:10px}.uk-search-default:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-right:40px}.uk-search-default:has(.uk-search-icon-flip) .uk-search-input{padding-left:40px}.uk-search-navbar{width:240px}.uk-search-navbar .uk-search-input{height:40px;padding-right:10px;padding-left:10px;background:#fff;border:1px solid #e5e5e5}.uk-search-navbar .uk-search-input:focus{background-color:#fff;border-color:#1e87f0}.uk-search-navbar .uk-search-icon{padding-right:10px;padding-left:10px}.uk-search-navbar:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-right:40px}.uk-search-navbar:has(.uk-search-icon-flip) .uk-search-input{padding-left:40px}.uk-search-medium{width:400px}.uk-search-medium .uk-search-input{height:55px;padding-right:12px;padding-left:12px;background:0 0;font-size:1.5rem;border:1px solid #e5e5e5}.uk-search-medium .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-medium .uk-search-icon{padding-right:12px;padding-left:12px}.uk-search-medium:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-right:48px}.uk-search-medium:has(.uk-search-icon-flip) .uk-search-input{padding-left:48px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:90px;padding-right:20px;padding-left:20px;background:0 0;font-size:2.625rem;border:1px solid #e5e5e5}.uk-search-large .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-large .uk-search-icon{padding-right:20px;padding-left:20px}.uk-search-large:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-right:80px}.uk-search-large:has(.uk-search-icon-flip) .uk-search-input{padding-left:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-right:10px;float:left;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset:20px;--uk-position-viewport-offset:15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100%!important}.uk-drop-parent-icon{margin-right:.25em;transition:transform .3s ease-out}[aria-expanded=true]>.uk-drop-parent-icon{transform:rotateX(180deg)}.uk-dropbar{--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:0;--uk-inverse:dark;width:auto;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width:640px){.uk-dropbar{padding-right:30px;padding-left:30px}}@media (min-width:960px){.uk-dropbar{padding-right:40px;padding-left:40px}}.uk-dropbar :focus-visible{outline-color:#333!important}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropnav-dropbar{position:absolute;z-index:980;padding:0;right:0;left:0}.uk-modal{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:1010;overflow-y:auto;padding:15px 15px;background:rgba(0,0,0,.6);opacity:0;transition:opacity .15s linear}@media (min-width:640px){.uk-modal{padding:50px 30px}}@media (min-width:960px){.uk-modal{padding-right:40px;padding-left:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100%!important;background:#fff;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:0 0}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width:640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:1010;top:10px;left:10px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;left:-5px;transform:translate(0,-100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width:960px){.uk-modal-close-outside{left:0;transform:translate(-100%,-100%)}}.uk-modal-close-full{top:0;left:0;padding:10px;background:#fff}@media (min-width:960px){.uk-modal-close-full{padding:20px}}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;right:0;left:0;bottom:0;overflow:hidden;will-change:transform,opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden;overflow:clip}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none!important;box-sizing:border-box;max-width:100%;position:relative}.uk-sticky{position:relative;z-index:980;box-sizing:border-box}.uk-sticky-fixed{margin:0!important}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;right:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{left:0;right:auto}.uk-offcanvas-bar{--uk-inverse:light;position:absolute;top:0;bottom:0;right:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto}@media (min-width:640px){.uk-offcanvas-bar{right:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{right:auto;left:-270px}@media (min-width:640px){.uk-offcanvas-flip .uk-offcanvas-bar{left:-350px}}.uk-open>.uk-offcanvas-bar{right:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{right:auto;left:0}.uk-offcanvas-bar-animation{transition:right .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:left}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;right:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{right:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{right:auto;left:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width:640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{left:0;right:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;left:5px;padding:5px}@media (min-width:640px){.uk-offcanvas-close{top:10px;left:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;right:0;left:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-container,.uk-offcanvas-page{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;right:0;transition:right .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{right:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{right:-270px}@media (min-width:640px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{right:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{right:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-right:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content:.}.uk-notification{position:fixed;top:10px;right:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-bottom-left,.uk-notification-top-left{right:auto;left:10px}.uk-notification-bottom-center,.uk-notification-top-center{right:50%;margin-right:-175px}.uk-notification-bottom-center,.uk-notification-bottom-left,.uk-notification-bottom-right{top:auto;bottom:10px}@media (max-width:639px){.uk-notification{right:10px;left:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;left:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset:10px;--uk-position-viewport-offset:10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed!important;z-index:1050!important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width:640px){.uk-countdown-number{font-size:4rem}}@media (min-width:960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width:640px){.uk-countdown-separator{font-size:2rem}}@media (min-width:960px){.uk-countdown-separator{font-size:3rem}}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-right:-15px}.uk-thumbnav>*{padding-right:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>::after{content:"";position:absolute;top:0;bottom:0;right:0;left:0;background-image:linear-gradient(-180deg,rgba(255,255,255,0),rgba(255,255,255,.4));transition:opacity .1s ease-in-out}.uk-thumbnav>*>:hover::after{opacity:0}.uk-thumbnav>.uk-active>::after{opacity:0}.uk-thumbnav-vertical{flex-direction:column;margin-right:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-right:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-right:-10px}.uk-iconnav>*{padding-right:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:.25em;line-height:0;color:#999;text-decoration:none;font-size:.875rem;transition:.1s ease-in-out;transition-property:color,background-color}.uk-iconnav>*>a:hover{color:#666}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-right:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-right:0;padding-top:10px}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-right:-30px}.uk-grid>*{padding-right:30px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:30px}@media (min-width:1200px){.uk-grid{margin-right:-40px}.uk-grid>*{padding-right:40px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:40px}}.uk-grid-column-small,.uk-grid-small{margin-right:-15px}.uk-grid-column-small>*,.uk-grid-small>*{padding-right:15px}*+.uk-grid-margin-small,.uk-grid+.uk-grid-row-small,.uk-grid+.uk-grid-small,.uk-grid-row-small>.uk-grid-margin,.uk-grid-small>.uk-grid-margin{margin-top:15px}.uk-grid-column-medium,.uk-grid-medium{margin-right:-30px}.uk-grid-column-medium>*,.uk-grid-medium>*{padding-right:30px}*+.uk-grid-margin-medium,.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin{margin-top:30px}.uk-grid-column-large,.uk-grid-large{margin-right:-40px}.uk-grid-column-large>*,.uk-grid-large>*{padding-right:40px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:40px}@media (min-width:1200px){.uk-grid-column-large,.uk-grid-large{margin-right:-70px}.uk-grid-column-large>*,.uk-grid-large>*{padding-right:70px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-right:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-right:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-right:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;right:0;left:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-right:-60px}.uk-grid-divider>*{padding-right:60px}.uk-grid-divider>:not(.uk-first-column)::before{right:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;right:60px}@media (min-width:1200px){.uk-grid-divider{margin-right:-80px}.uk-grid-divider>*{padding-right:80px}.uk-grid-divider>:not(.uk-first-column)::before{right:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;right:80px}}.uk-grid-divider.uk-grid-column-small,.uk-grid-divider.uk-grid-small{margin-right:-30px}.uk-grid-divider.uk-grid-column-small>*,.uk-grid-divider.uk-grid-small>*{padding-right:30px}.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{right:15px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;right:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{right:30px}.uk-grid-divider.uk-grid-column-medium,.uk-grid-divider.uk-grid-medium{margin-right:-60px}.uk-grid-divider.uk-grid-column-medium>*,.uk-grid-divider.uk-grid-medium>*{padding-right:60px}.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{right:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;right:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{right:60px}.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-right:-80px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-right:80px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{right:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;right:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{right:80px}@media (min-width:1200px){.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-right:-140px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-right:140px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{right:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;right:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{right:140px}}.uk-grid-item-match,.uk-grid-match>*{display:flex;flex-wrap:wrap}.uk-grid-item-match>:not([class*=uk-width]),.uk-grid-match>*>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 15px 5px 0}.uk-nav-sub ul{padding-right:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-right:auto;transition:transform .3s ease-out}.uk-nav>li.uk-open>a .uk-nav-parent-icon{transform:rotateX(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-medium{font-size:2.8875rem;line-height:1}.uk-nav-large{font-size:3.4rem;line-height:1}.uk-nav-xlarge{font-size:4rem;line-height:1}@media (min-width:960px){.uk-nav-medium{font-size:3.5rem}.uk-nav-large{font-size:4rem}.uk-nav-xlarge{font-size:6rem}}@media (min-width:1200px){.uk-nav-medium{font-size:4rem}.uk-nav-large{font-size:6rem}.uk-nav-xlarge{font-size:8rem}}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-right:0}.uk-nav-center .uk-nav-parent-icon{margin-right:.25em}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{display:flex;gap:15px;align-items:center}.uk-navbar-left{margin-right:auto}.uk-navbar-center:only-child{margin-right:auto;margin-left:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;right:50%;transform:translate(50%,-50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-right{left:calc(100% + 15px)}.uk-navbar-center-left{right:calc(100% + 15px)}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:15px;margin:0;padding:0;list-style:none}.uk-navbar-center:only-child,.uk-navbar-left,.uk-navbar-right{flex-wrap:wrap}.uk-navbar-item,.uk-navbar-nav>li>a,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#999;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded=true]{color:#666}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-right:4px;transition:transform .3s ease-out}.uk-navbar-nav>li>a[aria-expanded=true] .uk-navbar-parent-icon{transform:rotateX(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded=true]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{--uk-position-offset:15px;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown :focus-visible{outline-color:#333!important}.uk-navbar-dropdown .uk-drop-grid{margin-right:-30px}.uk-navbar-dropdown .uk-drop-grid>*{padding-right:30px}.uk-navbar-dropdown .uk-drop-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-width-2:not(.uk-drop-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-drop-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-drop-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-drop-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset:0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:0 0;padding:25px 0 25px 0;--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;box-shadow:none}@media (min-width:640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset:0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-container{transition:.1s ease-in-out;transition-property:background-color}@media (min-width:960px){.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{gap:30px}.uk-navbar-center-right{left:calc(100% + 30px)}.uk-navbar-center-left{right:calc(100% + 30px)}}@media (min-width:960px){.uk-navbar-nav{gap:30px}}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-right:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-right:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-right:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-right:0;margin-left:20px;border-right:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-right-color:#e5e5e5}.uk-subnav-pill{margin-right:-20px}.uk-subnav-pill>*{padding-right:20px}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:0 0;color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>a:not([href]),.uk-breadcrumb>:last-child>span{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-right:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-right:0;position:relative}.uk-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:#999;transition:color .1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-right:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;right:20px;left:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-right:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color .1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-right:0}.uk-tab-left>*,.uk-tab-right>*{padding-right:0}.uk-tab-right::before{top:0;bottom:0;right:auto;left:0;border-right:1px solid #e5e5e5;border-bottom:none}.uk-tab-left::before{top:0;bottom:0;right:0;left:auto;border-right:1px solid #e5e5e5;border-bottom:none}.uk-tab-right>*>a{justify-content:right;border-left:1px solid transparent;border-bottom:none}.uk-tab-left>*>a{justify-content:right;border-right:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-right:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,.5);transition:color .1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,.9)}.uk-slidenav:active{color:rgba(102,102,102,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-right:-12px}.uk-dotnav>*{flex:none;padding-right:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:0 0;text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,.4);transition:.2s ease-in-out;transition-property:background-color,border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,.6);border-color:transparent}.uk-dotnav>*>:active{background-color:rgba(102,102,102,.2);border-color:transparent}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,.6);border-color:transparent}.uk-dotnav-vertical{flex-direction:column;margin-right:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-right:0;padding-top:12px}.uk-dropdown{--uk-position-offset:10px;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:auto;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown :focus-visible{outline-color:#333!important}.uk-dropdown-large{padding:40px}.uk-dropdown-dropbar{--uk-position-offset:10px;width:auto;background:0 0;padding:5px 0 25px 0;--uk-position-viewport-offset:15px;box-shadow:none}@media (min-width:640px){.uk-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-dropdown-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li.uk-active>a,.uk-dropdown-nav>li>a:hover{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-lightbox{--uk-inverse:light;display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:1010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items{margin:0;padding:0;list-style:none}.uk-lightbox-items>*{position:absolute;top:0;left:0;bottom:0;right:0;display:none;justify-content:center;align-items:flex-start;will-change:transform,opacity;overflow:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-items-fit>*{align-items:center}.uk-lightbox-items-fit>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items-fit>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items.uk-lightbox-items-fit .uk-lightbox-zoom:hover{cursor:zoom-in}.uk-lightbox-items:not(.uk-lightbox-items-fit) .uk-lightbox-zoom:hover{cursor:zoom-out}.uk-lightbox-thumbnav-vertical :where(img,video){max-width:100px}.uk-lightbox-thumbnav:not(.uk-lightbox-thumbnav-vertical) :where(img,video){max-height:100px}.uk-lightbox-dotnav:empty,.uk-lightbox-thumbnav:empty{display:none}.uk-lightbox-caption:empty{display:none}.uk-lightbox-caption{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-caption>*{color:rgba(255,255,255,.7)}.uk-lightbox-counter:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*=uk-animation-]{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade,uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade,uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade,uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade,uk-slide-bottom}.uk-animation-slide-right{animation-name:uk-fade,uk-slide-left}.uk-animation-slide-left{animation-name:uk-fade,uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade,uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade,uk-slide-bottom-small}.uk-animation-slide-right-small{animation-name:uk-fade,uk-slide-left-small}.uk-animation-slide-left-small{animation-name:uk-fade,uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade,uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade,uk-slide-bottom-medium}.uk-animation-slide-right-medium{animation-name:uk-fade,uk-slide-left-medium}.uk-animation-slide-left-medium{animation-name:uk-fade,uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(9px)}20%{transform:translateX(-8px)}30%{transform:translateX(7px)}40%{transform:translateX(-6px)}50%{transform:translateX(5px)}60%{transform:translateX(-4px)}70%{transform:translateX(3px)}80%{transform:translateX(-2px)}90%{transform:translateX(1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% / 3)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% / 6)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width:640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% / 3)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% / 6)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@s>:not([class*=uk-width]),.uk-child-width-1-2\@s>:not([class*=uk-width]),.uk-child-width-1-3\@s>:not([class*=uk-width]),.uk-child-width-1-4\@s>:not([class*=uk-width]),.uk-child-width-1-5\@s>:not([class*=uk-width]),.uk-child-width-1-6\@s>:not([class*=uk-width]),.uk-child-width-auto\@s>:not([class*=uk-width]){flex:initial}}@media (min-width:960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% / 3)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% / 6)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@m>:not([class*=uk-width]),.uk-child-width-1-2\@m>:not([class*=uk-width]),.uk-child-width-1-3\@m>:not([class*=uk-width]),.uk-child-width-1-4\@m>:not([class*=uk-width]),.uk-child-width-1-5\@m>:not([class*=uk-width]),.uk-child-width-1-6\@m>:not([class*=uk-width]),.uk-child-width-auto\@m>:not([class*=uk-width]){flex:initial}}@media (min-width:1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% / 3)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% / 6)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@l>:not([class*=uk-width]),.uk-child-width-1-2\@l>:not([class*=uk-width]),.uk-child-width-1-3\@l>:not([class*=uk-width]),.uk-child-width-1-4\@l>:not([class*=uk-width]),.uk-child-width-1-5\@l>:not([class*=uk-width]),.uk-child-width-1-6\@l>:not([class*=uk-width]),.uk-child-width-auto\@l>:not([class*=uk-width]){flex:initial}}@media (min-width:1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% / 3)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% / 6)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@xl>:not([class*=uk-width]),.uk-child-width-1-2\@xl>:not([class*=uk-width]),.uk-child-width-1-3\@xl>:not([class*=uk-width]),.uk-child-width-1-4\@xl>:not([class*=uk-width]),.uk-child-width-1-5\@xl>:not([class*=uk-width]),.uk-child-width-1-6\@xl>:not([class*=uk-width]),.uk-child-width-auto\@xl>:not([class*=uk-width]){flex:initial}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% / 3)}.uk-width-2-3{width:calc(200% / 3)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% / 6)}.uk-width-5-6{width:calc(500% / 6)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width:640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% / 3)}.uk-width-2-3\@s{width:calc(200% / 3)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% / 6)}.uk-width-5-6\@s{width:calc(500% / 6)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}.uk-width-1-1\@s,.uk-width-1-2\@s,.uk-width-1-3\@s,.uk-width-1-4\@s,.uk-width-1-5\@s,.uk-width-1-6\@s,.uk-width-2-3\@s,.uk-width-2-5\@s,.uk-width-2xlarge\@s,.uk-width-3-4\@s,.uk-width-3-5\@s,.uk-width-4-5\@s,.uk-width-5-6\@s,.uk-width-auto\@s,.uk-width-large\@s,.uk-width-medium\@s,.uk-width-small\@s,.uk-width-xlarge\@s{flex:initial}}@media (min-width:960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% / 3)}.uk-width-2-3\@m{width:calc(200% / 3)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% / 6)}.uk-width-5-6\@m{width:calc(500% / 6)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}.uk-width-1-1\@m,.uk-width-1-2\@m,.uk-width-1-3\@m,.uk-width-1-4\@m,.uk-width-1-5\@m,.uk-width-1-6\@m,.uk-width-2-3\@m,.uk-width-2-5\@m,.uk-width-2xlarge\@m,.uk-width-3-4\@m,.uk-width-3-5\@m,.uk-width-4-5\@m,.uk-width-5-6\@m,.uk-width-auto\@m,.uk-width-large\@m,.uk-width-medium\@m,.uk-width-small\@m,.uk-width-xlarge\@m{flex:initial}}@media (min-width:1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% / 3)}.uk-width-2-3\@l{width:calc(200% / 3)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% / 6)}.uk-width-5-6\@l{width:calc(500% / 6)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}.uk-width-1-1\@l,.uk-width-1-2\@l,.uk-width-1-3\@l,.uk-width-1-4\@l,.uk-width-1-5\@l,.uk-width-1-6\@l,.uk-width-2-3\@l,.uk-width-2-5\@l,.uk-width-2xlarge\@l,.uk-width-3-4\@l,.uk-width-3-5\@l,.uk-width-4-5\@l,.uk-width-5-6\@l,.uk-width-auto\@l,.uk-width-large\@l,.uk-width-medium\@l,.uk-width-small\@l,.uk-width-xlarge\@l{flex:initial}}@media (min-width:1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% / 3)}.uk-width-2-3\@xl{width:calc(200% / 3)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% / 6)}.uk-width-5-6\@xl{width:calc(500% / 6)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}.uk-width-1-1\@xl,.uk-width-1-2\@xl,.uk-width-1-3\@xl,.uk-width-1-4\@xl,.uk-width-1-5\@xl,.uk-width-1-6\@xl,.uk-width-2-3\@xl,.uk-width-2-5\@xl,.uk-width-2xlarge\@xl,.uk-width-3-4\@xl,.uk-width-3-5\@xl,.uk-width-4-5\@xl,.uk-width-5-6\@xl,.uk-width-auto\@xl,.uk-width-large\@xl,.uk-width-medium\@xl,.uk-width-small\@xl,.uk-width-xlarge\@xl{flex:initial}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta>a{color:#999}.uk-text-meta>a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-decoration-none{text-decoration:none!important}.uk-text-muted{color:#999!important}.uk-text-emphasis{color:#333!important}.uk-text-primary{color:#1e87f0!important}.uk-text-secondary{color:#222!important}.uk-text-success{color:#32d296!important}.uk-text-warning{color:#faa05a!important}.uk-text-danger{color:#f0506e!important}.uk-text-background{-webkit-background-clip:text;color:transparent!important;display:inline-block;background-color:#1e87f0;background-image:linear-gradient(-90deg,#1e87f0 0,#411ef0 100%)}.uk-text-right{text-align:right!important}.uk-text-left{text-align:left!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}@media (min-width:640px){.uk-text-right\@s{text-align:right!important}.uk-text-left\@s{text-align:left!important}.uk-text-center\@s{text-align:center!important}}@media (min-width:960px){.uk-text-right\@m{text-align:right!important}.uk-text-left\@m{text-align:left!important}.uk-text-center\@m{text-align:center!important}}@media (min-width:1200px){.uk-text-right\@l{text-align:right!important}.uk-text-left\@l{text-align:left!important}.uk-text-center\@l{text-align:center!important}}@media (min-width:1600px){.uk-text-right\@xl{text-align:right!important}.uk-text-left\@xl{text-align:left!important}.uk-text-center\@xl{text-align:center!important}}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}.uk-text-baseline{vertical-align:baseline!important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.uk-text-truncate,th.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}td.uk-text-break,th.uk-text-break{word-break:break-word}.uk-text-stroke{-webkit-text-stroke:calc(1.4px + 0.002em);-webkit-text-fill-color:transparent}[class*=uk-column-]{column-gap:30px}@media (min-width:1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0,0,0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width:1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width:640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width:960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width:1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width:1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[data-uk-cover]:where(canvas,iframe,svg),[uk-cover]:where(canvas,iframe,svg){max-width:none;position:absolute;right:50%;top:50%;--uk-position-translate-x:50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y))}iframe[data-uk-cover],iframe[uk-cover]{pointer-events:none}[data-uk-cover]:where(img,video),[uk-cover]:where(img,video){position:absolute;top:0;right:0;width:100%;height:100%;box-sizing:border-box;object-fit:cover;object-position:center}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-contain,.uk-background-cover,.uk-background-height-1-1,.uk-background-width-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-right{background-position:100% 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-left{background-position:0 0}.uk-background-center-right{background-position:100% 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-left{background-position:0 50%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-left{background-position:0 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed}@media (pointer:coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width:639px){.uk-background-image\@s{background-image:none!important}}@media (max-width:959px){.uk-background-image\@m{background-image:none!important}}@media (max-width:1199px){.uk-background-image\@l{background-image:none!important}}@media (max-width:1599px){.uk-background-image\@xl{background-image:none!important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-right:auto;margin-left:auto}.uk-align-right{margin-top:0;margin-left:30px;float:right}.uk-align-left{margin-top:0;margin-right:30px;float:left}@media (min-width:640px){.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}}@media (min-width:960px){.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}}@media (min-width:1200px){.uk-align-right\@l{margin-top:0;float:right}.uk-align-left\@l{margin-top:0;float:left}.uk-align-right,.uk-align-right\@l,.uk-align-right\@m,.uk-align-right\@s{margin-left:40px}.uk-align-left,.uk-align-left\@l,.uk-align-left\@m,.uk-align-left\@s{margin-right:40px}}@media (min-width:1600px){.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0,0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-right{float:right}.uk-float-left{float:left}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[data-uk-responsive],[uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-right{object-position:100% 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-left{object-position:0% 0}.uk-object-center-right{object-position:100% 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-left{object-position:0% 50%}.uk-object-bottom-right{object-position:100% 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-left{object-position:0% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter:blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;right:0;left:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-left:10px;float:right;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img,svg,video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(50%,-50%)}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-left{transform-origin:0% 0}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-center-left{transform-origin:0% 50%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-left{transform-origin:0% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-right{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-left{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width:640px){.uk-flex-right\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-left\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width:960px){.uk-flex-right\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-left\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width:1200px){.uk-flex-right\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-left\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width:1600px){.uk-flex-right\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-left\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}@media (min-width:640px){.uk-flex-stretch\@s{align-items:stretch}.uk-flex-top\@s{align-items:flex-start}.uk-flex-middle\@s{align-items:center}.uk-flex-bottom\@s{align-items:flex-end}}@media (min-width:960px){.uk-flex-stretch\@m{align-items:stretch}.uk-flex-top\@m{align-items:flex-start}.uk-flex-middle\@m{align-items:center}.uk-flex-bottom\@m{align-items:flex-end}}@media (min-width:1200px){.uk-flex-stretch\@l{align-items:stretch}.uk-flex-top\@l{align-items:flex-start}.uk-flex-middle\@l{align-items:center}.uk-flex-bottom\@l{align-items:flex-end}}@media (min-width:1600px){.uk-flex-stretch\@xl{align-items:stretch}.uk-flex-top\@xl{align-items:flex-start}.uk-flex-middle\@xl{align-items:center}.uk-flex-bottom\@xl{align-items:flex-end}}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}@media (min-width:640px){.uk-flex-row\@s{flex-direction:row}.uk-flex-column\@s{flex-direction:column}}@media (min-width:960px){.uk-flex-row\@m{flex-direction:row}.uk-flex-column\@m{flex-direction:column}}@media (min-width:1200px){.uk-flex-row\@l{flex-direction:row}.uk-flex-column\@l{flex-direction:column}}@media (min-width:1600px){.uk-flex-row\@xl{flex-direction:row}.uk-flex-column\@xl{flex-direction:column}}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width:640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width:960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width:1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width:1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-initial{flex:initial}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}@media (min-width:640px){.uk-flex-initial\@s{flex:initial}.uk-flex-none\@s{flex:none}.uk-flex-1\@s{flex:1}}@media (min-width:960px){.uk-flex-initial\@m{flex:initial}.uk-flex-none\@m{flex:none}.uk-flex-1\@m{flex:1}}@media (min-width:1200px){.uk-flex-initial\@l{flex:initial}.uk-flex-none\@l{flex:none}.uk-flex-1\@l{flex:1}}@media (min-width:1600px){.uk-flex-initial\@xl{flex:initial}.uk-flex-none\@xl{flex:none}.uk-flex-1\@xl{flex:1}}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px!important}.uk-margin-top{margin-top:20px!important}.uk-margin-bottom{margin-bottom:20px!important}.uk-margin-right{margin-right:20px!important}.uk-margin-left{margin-left:20px!important}.uk-margin-xsmall{margin-bottom:5px}*+.uk-margin-xsmall{margin-top:5px!important}.uk-margin-xsmall-top{margin-top:5px!important}.uk-margin-xsmall-bottom{margin-bottom:5px!important}.uk-margin-xsmall-right{margin-right:5px!important}.uk-margin-xsmall-left{margin-left:5px!important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px!important}.uk-margin-small-top{margin-top:10px!important}.uk-margin-small-bottom{margin-bottom:10px!important}.uk-margin-small-right{margin-right:10px!important}.uk-margin-small-left{margin-left:10px!important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px!important}.uk-margin-medium-top{margin-top:40px!important}.uk-margin-medium-bottom{margin-bottom:40px!important}.uk-margin-medium-right{margin-right:40px!important}.uk-margin-medium-left{margin-left:40px!important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px!important}.uk-margin-large-top{margin-top:40px!important}.uk-margin-large-bottom{margin-bottom:40px!important}.uk-margin-large-right{margin-right:40px!important}.uk-margin-large-left{margin-left:40px!important}@media (min-width:1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px!important}.uk-margin-large-top{margin-top:70px!important}.uk-margin-large-bottom{margin-bottom:70px!important}.uk-margin-large-right{margin-right:70px!important}.uk-margin-large-left{margin-left:70px!important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px!important}.uk-margin-xlarge-top{margin-top:70px!important}.uk-margin-xlarge-bottom{margin-bottom:70px!important}.uk-margin-xlarge-right{margin-right:70px!important}.uk-margin-xlarge-left{margin-left:70px!important}@media (min-width:1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px!important}.uk-margin-xlarge-top{margin-top:140px!important}.uk-margin-xlarge-bottom{margin-bottom:140px!important}.uk-margin-xlarge-right{margin-right:140px!important}.uk-margin-xlarge-left{margin-left:140px!important}}.uk-margin-auto{margin-right:auto!important;margin-left:auto!important}.uk-margin-auto-top{margin-top:auto!important}.uk-margin-auto-bottom{margin-bottom:auto!important}.uk-margin-auto-right{margin-right:auto!important}.uk-margin-auto-left{margin-left:auto!important}.uk-margin-auto-vertical{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:640px){.uk-margin-auto\@s{margin-right:auto!important;margin-left:auto!important}.uk-margin-auto-right\@s{margin-right:auto!important}.uk-margin-auto-left\@s{margin-left:auto!important}}@media (min-width:960px){.uk-margin-auto\@m{margin-right:auto!important;margin-left:auto!important}.uk-margin-auto-right\@m{margin-right:auto!important}.uk-margin-auto-left\@m{margin-left:auto!important}}@media (min-width:1200px){.uk-margin-auto\@l{margin-right:auto!important;margin-left:auto!important}.uk-margin-auto-right\@l{margin-right:auto!important}.uk-margin-auto-left\@l{margin-left:auto!important}}@media (min-width:1600px){.uk-margin-auto\@xl{margin-right:auto!important;margin-left:auto!important}.uk-margin-auto-right\@xl{margin-right:auto!important}.uk-margin-auto-left\@xl{margin-left:auto!important}}.uk-margin-remove{margin:0!important}.uk-margin-remove-top{margin-top:0!important}.uk-margin-remove-bottom{margin-bottom:0!important}.uk-margin-remove-right{margin-right:0!important}.uk-margin-remove-left{margin-left:0!important}.uk-margin-remove-vertical{margin-top:0!important;margin-bottom:0!important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0!important}.uk-margin-remove-last-child>:last-child{margin-bottom:0!important}@media (min-width:640px){.uk-margin-remove-right\@s{margin-right:0!important}.uk-margin-remove-left\@s{margin-left:0!important}}@media (min-width:960px){.uk-margin-remove-right\@m{margin-right:0!important}.uk-margin-remove-left\@m{margin-left:0!important}}@media (min-width:1200px){.uk-margin-remove-right\@l{margin-right:0!important}.uk-margin-remove-left\@l{margin-left:0!important}}@media (min-width:1600px){.uk-margin-remove-right\@xl{margin-right:0!important}.uk-margin-remove-left\@xl{margin-left:0!important}}.uk-padding{padding:30px}@media (min-width:1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width:1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0!important}.uk-padding-remove-top{padding-top:0!important}.uk-padding-remove-bottom{padding-bottom:0!important}.uk-padding-remove-right{padding-right:0!important}.uk-padding-remove-left{padding-left:0!important}.uk-padding-remove-vertical{padding-top:0!important;padding-bottom:0!important}.uk-padding-remove-horizontal{padding-right:0!important;padding-left:0!important}:root{--uk-position-margin-offset:0px}[class*=uk-position-bottom],[class*=uk-position-center],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-top]{position:absolute!important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;right:0;left:0}.uk-position-bottom{bottom:0;right:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));right:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y));width:max-content}.uk-position-center-vertical,[class*=uk-position-center-left],[class*=uk-position-center-right]{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y:-50%;transform:translate(0,var(--uk-position-translate-y))}.uk-position-center-right{right:0}.uk-position-center-left{left:0}.uk-position-center-vertical{right:0;left:0}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-bottom-center,.uk-position-center-horizontal,.uk-position-top-center{right:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:50%;transform:translate(var(--uk-position-translate-x),0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-center-horizontal{top:0;bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;right:0;left:0}.uk-position-small{margin:15px;--uk-position-margin-offset:15px}.uk-position-medium{margin:30px;--uk-position-margin-offset:30px}.uk-position-large{margin:30px;--uk-position-margin-offset:30px}@media (min-width:1200px){.uk-position-large{margin:50px;--uk-position-margin-offset:50px}}.uk-position-relative{position:relative!important}.uk-position-absolute{position:absolute!important}.uk-position-fixed{position:fixed!important}.uk-position-sticky{position:sticky!important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}.uk-position-z-index-high{z-index:990}:where(.uk-transition-fade),:where([class*=uk-transition-scale]),:where([class*=uk-transition-slide]){--uk-position-translate-x:0;--uk-position-translate-y:0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;--uk-scale-x:1;--uk-scale-y:1;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y)) translate(var(--uk-translate-x),var(--uk-translate-y)) scale(var(--uk-scale-x),var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-active.uk-active .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle:focus-within .uk-transition-fade,.uk-transition-toggle:hover .uk-transition-fade{opacity:1}[class*=uk-transition-scale]{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x:1;--uk-scale-y:1}.uk-transition-scale-down{--uk-scale-x:1.03;--uk-scale-y:1.03}.uk-transition-active.uk-active .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle:focus-within .uk-transition-scale-up,.uk-transition-toggle:hover .uk-transition-scale-up{--uk-scale-x:1.03;--uk-scale-y:1.03;opacity:1}.uk-transition-active.uk-active .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle:focus-within .uk-transition-scale-down,.uk-transition-toggle:hover .uk-transition-scale-down{--uk-scale-x:1;--uk-scale-y:1;opacity:1}.uk-transition-slide-top{--uk-translate-y:-100%}.uk-transition-slide-bottom{--uk-translate-y:100%}.uk-transition-slide-right{--uk-translate-x:-100%}.uk-transition-slide-left{--uk-translate-x:100%}.uk-transition-slide-top-small{--uk-translate-y:calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y:10px}.uk-transition-slide-right-small{--uk-translate-x:calc(-1 * 10px)}.uk-transition-slide-left-small{--uk-translate-x:10px}.uk-transition-slide-top-medium{--uk-translate-y:calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y:50px}.uk-transition-slide-right-medium{--uk-translate-x:calc(-1 * 50px)}.uk-transition-slide-left-medium{--uk-translate-x:50px}.uk-transition-active.uk-active [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle:focus-within [class*=uk-transition-slide],.uk-transition-toggle:hover [class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-transition-disable,.uk-transition-disable *{transition:none!important}.uk-hidden,.uk-hidden-empty:empty,[hidden]{display:none!important}@media (min-width:640px){.uk-hidden\@s{display:none!important}}@media (min-width:960px){.uk-hidden\@m{display:none!important}}@media (min-width:1200px){.uk-hidden\@l{display:none!important}}@media (min-width:1600px){.uk-hidden\@xl{display:none!important}}@media (max-width:639px){.uk-visible\@s{display:none!important}}@media (max-width:959px){.uk-visible\@m{display:none!important}}@media (max-width:1199px){.uk-visible\@l{display:none!important}}@media (max-width:1599px){.uk-visible\@xl{display:none!important}}.uk-invisible{visibility:hidden!important}.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute!important;width:0!important;height:0!important;padding:0!important;border:0!important;margin:0!important;overflow:hidden!important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0!important}@media (hover:none){.uk-hidden-touch{display:none!important}}@media (hover){.uk-hidden-notouch{display:none!important}}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-overlay-primary,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-light .uk-link,.uk-light a,.uk-offcanvas-bar .uk-link,.uk-offcanvas-bar a,.uk-overlay-primary .uk-link,.uk-overlay-primary a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a{color:#fff}.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-light .uk-link:hover,.uk-light a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-overlay-primary .uk-link:hover,.uk-overlay-primary a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover{color:#fff}.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp{color:rgba(255,255,255,.7);background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-light em,.uk-offcanvas-bar em,.uk-overlay-primary em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em{color:#fff}.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-light .uk-h1,.uk-light .uk-h2,.uk-light .uk-h3,.uk-light .uk-h4,.uk-light .uk-h5,.uk-light .uk-h6,.uk-light .uk-heading-2xlarge,.uk-light .uk-heading-3xlarge,.uk-light .uk-heading-large,.uk-light .uk-heading-medium,.uk-light .uk-heading-small,.uk-light .uk-heading-xlarge,.uk-light h1,.uk-light h2,.uk-light h3,.uk-light h4,.uk-light h5,.uk-light h6,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-3xlarge,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar h3,.uk-offcanvas-bar h4,.uk-offcanvas-bar h5,.uk-offcanvas-bar h6,.uk-overlay-primary .uk-h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .uk-h5,.uk-overlay-primary .uk-h6,.uk-overlay-primary .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-overlay-primary .uk-heading-large,.uk-overlay-primary .uk-heading-medium,.uk-overlay-primary .uk-heading-small,.uk-overlay-primary .uk-heading-xlarge,.uk-overlay-primary h1,.uk-overlay-primary h2,.uk-overlay-primary h3,.uk-overlay-primary h4,.uk-overlay-primary h5,.uk-overlay-primary h6,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h6{color:#fff}.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*=uk-card-media]) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*=uk-card-media]) blockquote,.uk-light blockquote,.uk-offcanvas-bar blockquote,.uk-overlay-primary blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote{color:#fff}.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*=uk-card-media]) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*=uk-card-media]) blockquote footer,.uk-light blockquote footer,.uk-offcanvas-bar blockquote footer,.uk-overlay-primary blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-light .uk-hr,.uk-light hr,.uk-offcanvas-bar .uk-hr,.uk-offcanvas-bar hr,.uk-overlay-primary .uk-hr,.uk-overlay-primary hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*=uk-card-media]) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*=uk-card-media]) :focus-visible,.uk-light :focus-visible,.uk-offcanvas-bar :focus-visible,.uk-overlay-primary :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible{outline-color:#fff}.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-light .uk-link-muted a,.uk-light a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-overlay-primary a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-light a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-light a.uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar a.uk-link-text:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-light a.uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover{color:#fff}.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-light .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-light .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before{border-right-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-light .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-light .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-light .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-light .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-light .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical{border-right-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-muted>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-card-secondary.uk-card-body .uk-list-muted>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-light .uk-list-muted>::marker,.uk-offcanvas-bar .uk-list-muted>::marker,.uk-overlay-primary .uk-list-muted>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::marker{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-list-emphasis>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-card-secondary.uk-card-body .uk-list-emphasis>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-light .uk-list-emphasis>::marker,.uk-offcanvas-bar .uk-list-emphasis>::marker,.uk-overlay-primary .uk-list-emphasis>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-primary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-card-secondary.uk-card-body .uk-list-primary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-light .uk-list-primary>::marker,.uk-offcanvas-bar .uk-list-primary>::marker,.uk-overlay-primary .uk-list-primary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-secondary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-card-secondary.uk-card-body .uk-list-secondary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-light .uk-list-secondary>::marker,.uk-offcanvas-bar .uk-list-secondary>::marker,.uk-overlay-primary .uk-list-secondary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-light .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-light .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-table th,.uk-card-primary>:not([class*=uk-card-media]) .uk-table th,.uk-card-secondary.uk-card-body .uk-table th,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table th,.uk-light .uk-table th,.uk-offcanvas-bar .uk-table th,.uk-overlay-primary .uk-table th,.uk-section-primary:not(.uk-preserve-color) .uk-table th,.uk-section-secondary:not(.uk-preserve-color) .uk-table th,.uk-tile-primary:not(.uk-preserve-color) .uk-table th,.uk-tile-secondary:not(.uk-preserve-color) .uk-table th{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-table caption,.uk-card-primary>:not([class*=uk-card-media]) .uk-table caption,.uk-card-secondary.uk-card-body .uk-table caption,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table caption,.uk-light .uk-table caption,.uk-offcanvas-bar .uk-table caption,.uk-overlay-primary .uk-table caption,.uk-section-primary:not(.uk-preserve-color) .uk-table caption,.uk-section-secondary:not(.uk-preserve-color) .uk-table caption,.uk-tile-primary:not(.uk-preserve-color) .uk-table caption,.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-primary.uk-card-body .uk-table>tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-secondary.uk-card-body .uk-table>tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-light .uk-table tbody tr.uk-active,.uk-light .uk-table>tr.uk-active,.uk-offcanvas-bar .uk-table tbody tr.uk-active,.uk-offcanvas-bar .uk-table>tr.uk-active,.uk-overlay-primary .uk-table tbody tr.uk-active,.uk-overlay-primary .uk-table>tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-primary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-light .uk-table-divider>:first-child>tr:not(:first-child),.uk-light .uk-table-divider>:not(:first-child)>tr,.uk-light .uk-table-divider>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:first-child>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:not(:first-child)>tr,.uk-offcanvas-bar .uk-table-divider>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:first-child>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:not(:first-child)>tr,.uk-overlay-primary .uk-table-divider>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-light .uk-table-striped tbody tr:nth-of-type(odd),.uk-light .uk-table-striped>tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped>tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd){background:rgba(255,255,255,.1);border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-primary.uk-card-body .uk-table-hover>tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover>tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-light .uk-table-hover tbody tr:hover,.uk-light .uk-table-hover>tr:hover,.uk-offcanvas-bar .uk-table-hover tbody tr:hover,.uk-offcanvas-bar .uk-table-hover>tr:hover,.uk-overlay-primary .uk-table-hover tbody tr:hover,.uk-overlay-primary .uk-table-hover>tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-light .uk-icon-link,.uk-offcanvas-bar .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-light .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-light .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-light .uk-icon-button,.uk-offcanvas-bar .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-light .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-light .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active{background-color:rgba(255,255,255,.2);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-light .uk-range::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-light .uk-range:active::-webkit-slider-runnable-track,.uk-light .uk-range:focus::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:active::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:focus::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range:active::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range:focus::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-light .uk-range::-moz-range-track,.uk-offcanvas-bar .uk-range::-moz-range-track,.uk-overlay-primary .uk-range::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-light .uk-range:focus::-moz-range-track,.uk-offcanvas-bar .uk-range:focus::-moz-range-track,.uk-overlay-primary .uk-range:focus::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-light .uk-range::-webkit-slider-thumb,.uk-offcanvas-bar .uk-range::-webkit-slider-thumb,.uk-overlay-primary .uk-range::-webkit-slider-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb{background:grey;border-color:#e6e6e6}.uk-card-primary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-card-secondary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-light .uk-range::-moz-range-thumb,.uk-offcanvas-bar .uk-range::-moz-range-thumb,.uk-overlay-primary .uk-range::-moz-range-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb{background:grey;border-color:#e6e6e6}.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-light .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-light .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-light .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-light .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-light .uk-checkbox,.uk-light .uk-radio,.uk-offcanvas-bar .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-light .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-light .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus{background-color:#fff}.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-light .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-light .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-label,.uk-light .uk-form-label,.uk-offcanvas-bar .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label{color:#fff}.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-light .uk-form-icon,.uk-offcanvas-bar .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-light .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-light .uk-button-default,.uk-offcanvas-bar .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default{background-color:transparent;color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-light .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-light .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-light .uk-button-primary,.uk-offcanvas-bar .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-light .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-light .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-light .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-light .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-light .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-light .uk-button-text,.uk-offcanvas-bar .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text{color:#fff}.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-light .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before{border-bottom-color:#fff}.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-light .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover{color:#fff}.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-light .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-light .uk-button-link,.uk-offcanvas-bar .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link{color:#fff}.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-light .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body.uk-card-badge,.uk-card-primary>:not([class*=uk-card-media]).uk-card-badge,.uk-card-secondary.uk-card-body.uk-card-badge,.uk-card-secondary>:not([class*=uk-card-media]).uk-card-badge,.uk-light.uk-card-badge,.uk-offcanvas-bar.uk-card-badge,.uk-overlay-primary.uk-card-badge,.uk-section-primary:not(.uk-preserve-color).uk-card-badge,.uk-section-secondary:not(.uk-preserve-color).uk-card-badge,.uk-tile-primary:not(.uk-preserve-color).uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-light .uk-close,.uk-offcanvas-bar .uk-close,.uk-overlay-primary .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-light .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-light .uk-totop,.uk-offcanvas-bar .uk-totop,.uk-overlay-primary .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-light .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-light .uk-totop:active,.uk-offcanvas-bar .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active{color:#fff}.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-light .uk-marker,.uk-offcanvas-bar .uk-marker,.uk-overlay-primary .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker{background:#f8f8f8;color:#666}.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-light .uk-marker:hover,.uk-offcanvas-bar .uk-marker:hover,.uk-overlay-primary .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover{color:#666}.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-light .uk-badge,.uk-offcanvas-bar .uk-badge,.uk-overlay-primary .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge{background-color:#fff;color:#666!important}.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-light .uk-label,.uk-offcanvas-bar .uk-label,.uk-overlay-primary .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-light .uk-article-meta,.uk-offcanvas-bar .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-light .uk-search-input,.uk-offcanvas-bar .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-light .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-light .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-light .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-light .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-light .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-light .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-light .uk-search-navbar .uk-search-input:focus,.uk-offcanvas-bar .uk-search-navbar .uk-search-input:focus,.uk-overlay-primary .uk-search-navbar .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-light .uk-search-medium .uk-search-input,.uk-offcanvas-bar .uk-search-medium .uk-search-input,.uk-overlay-primary .uk-search-medium .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-light .uk-search-medium .uk-search-input:focus,.uk-offcanvas-bar .uk-search-medium .uk-search-input:focus,.uk-overlay-primary .uk-search-medium .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-light .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-light .uk-search-large .uk-search-input:focus,.uk-offcanvas-bar .uk-search-large .uk-search-input:focus,.uk-overlay-primary .uk-search-large .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-light .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-light .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-accordion-title,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-card-secondary.uk-card-body .uk-accordion-title,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-light .uk-accordion-title,.uk-offcanvas-bar .uk-accordion-title,.uk-overlay-primary .uk-accordion-title,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title{color:#fff}.uk-card-primary.uk-card-body .uk-accordion-title:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-card-secondary.uk-card-body .uk-accordion-title:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-light .uk-accordion-title:hover,.uk-offcanvas-bar .uk-accordion-title:hover,.uk-overlay-primary .uk-accordion-title:hover,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-thumbnav>*>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-thumbnav>*>::after,.uk-card-secondary.uk-card-body .uk-thumbnav>*>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-thumbnav>*>::after,.uk-light .uk-thumbnav>*>::after,.uk-offcanvas-bar .uk-thumbnav>*>::after,.uk-overlay-primary .uk-thumbnav>*>::after,.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav>*>::after{background-image:linear-gradient(-180deg,rgba(0,0,0,0),rgba(0,0,0,.4))}.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-light .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-light .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before{border-right-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-light .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-light .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-light .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-light .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-light .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-light .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-light .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-light .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-light .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-light .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-light .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-light .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-light .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-light .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-light .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-light .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded=true],.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-light .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-light .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-light .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-light .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded=true],.uk-overlay-primary .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-light .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-light .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-right-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-light .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child{background-color:transparent;color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-light .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-light .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-light .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-light .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-light .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-light .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-light .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-light .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab::before,.uk-light .uk-tab::before,.uk-offcanvas-bar .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before{border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-light .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-light .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-light .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-light .uk-slidenav,.uk-offcanvas-bar .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-light .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-light .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-light .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*{background-color:transparent;border-color:rgba(255,255,255,.9)}.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-light .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-light .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-light .uk-text-lead,.uk-offcanvas-bar .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-light .uk-text-meta,.uk-offcanvas-bar .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-light .uk-text-muted,.uk-offcanvas-bar .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-light .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-light .uk-text-primary,.uk-offcanvas-bar .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-light .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary{color:#fff!important}.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-light .uk-column-divider,.uk-offcanvas-bar .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-light .uk-logo,.uk-offcanvas-bar .uk-logo,.uk-overlay-primary .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo{color:#fff}.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-light .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover{color:#fff}.uk-card-primary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-light .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-overlay-primary .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse){display:none}.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-light .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse{display:block}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-light .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-light .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-light .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}*{--uk-inverse:initial}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-overlay-primary,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){--uk-inverse:light}.uk-card-default.uk-card-body,.uk-card-default>:not([class*=uk-card-media]),.uk-dark,.uk-dropbar,.uk-dropdown,.uk-navbar-container:not(.uk-navbar-transparent),.uk-navbar-dropdown,.uk-overlay-default,.uk-section-default:not(.uk-preserve-color),.uk-section-muted:not(.uk-preserve-color),.uk-tile-default:not(.uk-preserve-color),.uk-tile-muted:not(.uk-preserve-color){--uk-inverse:dark}.uk-inverse-light{--uk-inverse:light!important}.uk-inverse-dark{--uk-inverse:dark!important}@media print{*,::after,::before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/web/static/uikit/css/uikit.css b/web/static/uikit/css/uikit.css new file mode 100644 index 0000000..7880080 --- /dev/null +++ b/web/static/uikit/css/uikit.css @@ -0,0 +1,13125 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */ +/* ======================================================================== + Component: Base + ========================================================================== */ +/* + * 1. Set `font-size` to support `rem` units + * 2. Prevent adjustments of font size after orientation changes in iOS. + * 3. Style + */ +html { + /* 1 */ + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 16px; + font-weight: normal; + line-height: 1.5; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 3 */ + background: #fff; + color: #666; +} +/* + * Remove the margin in all browsers. + */ +body { + margin: 0; +} +/* Links + ========================================================================== */ +/* + * Style + */ +a, +.uk-link { + color: #1e87f0; + text-decoration: none; + cursor: pointer; +} +a:hover, +.uk-link:hover, +.uk-link-toggle:hover .uk-link { + color: #0f6ecd; + text-decoration: underline; +} +/* Text-level semantics + ========================================================================== */ +/* + * 1. Add the correct text decoration in Edge. + * 2. The shorthand declaration `underline dotted` is not supported in Safari. + */ +abbr[title] { + /* 1 */ + text-decoration: underline dotted; + /* 2 */ + -webkit-text-decoration-style: dotted; +} +/* + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} +/* + * 1. Consolas has a better baseline in running text compared to `Courier` + * 2. Correct the odd `em` font sizing in all browsers. + * 3. Style + */ +:not(pre) > code, +:not(pre) > kbd, +:not(pre) > samp { + /* 1 */ + font-family: Consolas, monaco, monospace; + /* 2 */ + font-size: 0.875rem; + /* 3 */ + color: #f0506e; + white-space: nowrap; + padding: 2px 6px; + background: #f8f8f8; +} +/* + * Emphasize + */ +em { + color: #f0506e; +} +/* + * Insert + */ +ins { + background: #ffd; + color: #666; + text-decoration: none; +} +/* + * Mark + */ +mark { + background: #ffd; + color: #666; +} +/* + * Quote + */ +q { + font-style: italic; +} +/* + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} +/* + * Prevents `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +/* Embedded content + ========================================================================== */ +/* + * Remove the gap between the element and the bottom of its parent container. + */ +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} +/* + * 1. Constrain the element to its parent width. + * 2. Preserve the intrinsic aspect ratio and auto-scale the height of an image if the `height` attribute is present. + * 3. Take border and padding into account. + */ +canvas, +img, +svg, +video { + /* 1 */ + max-width: 100%; + /* 2 */ + height: auto; + /* 3 */ + box-sizing: border-box; +} +/* + * Deprecated: only needed for `img` elements with `uk-img` + * 1. Hide `alt` text for lazy load images. + * 2. Fix lazy loading images if parent element is set to `display: inline` and has `overflow: hidden`. + */ +img:not([src]) { + /* 1 */ + visibility: hidden; + /* 2 */ + min-width: 1px; +} +/* + * Iframe + * Remove border in all browsers + */ +iframe { + border: 0; +} +/* Block elements + ========================================================================== */ +/* + * Margins + */ +p, +ul, +ol, +dl, +pre, +address, +fieldset, +figure { + margin: 0 0 20px 0; +} +/* Add margin if adjacent element */ +* + p, +* + ul, +* + ol, +* + dl, +* + pre, +* + address, +* + fieldset, +* + figure { + margin-top: 20px; +} +/* Headings + ========================================================================== */ +h1, +.uk-h1, +h2, +.uk-h2, +h3, +.uk-h3, +h4, +.uk-h4, +h5, +.uk-h5, +h6, +.uk-h6, +.uk-heading-small, +.uk-heading-medium, +.uk-heading-large, +.uk-heading-xlarge, +.uk-heading-2xlarge, +.uk-heading-3xlarge { + margin: 0 0 20px 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-weight: normal; + color: #333; + text-transform: none; +} +/* Add margin if adjacent element */ +* + h1, +* + .uk-h1, +* + h2, +* + .uk-h2, +* + h3, +* + .uk-h3, +* + h4, +* + .uk-h4, +* + h5, +* + .uk-h5, +* + h6, +* + .uk-h6, +* + .uk-heading-small, +* + .uk-heading-medium, +* + .uk-heading-large, +* + .uk-heading-xlarge, +* + .uk-heading-2xlarge, +* + .uk-heading-3xlarge { + margin-top: 40px; +} +/* + * Sizes + */ +h1, +.uk-h1 { + font-size: 2.23125rem; + line-height: 1.2; +} +h2, +.uk-h2 { + font-size: 1.7rem; + line-height: 1.3; +} +h3, +.uk-h3 { + font-size: 1.5rem; + line-height: 1.4; +} +h4, +.uk-h4 { + font-size: 1.25rem; + line-height: 1.4; +} +h5, +.uk-h5 { + font-size: 16px; + line-height: 1.4; +} +h6, +.uk-h6 { + font-size: 0.875rem; + line-height: 1.4; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + h1, + .uk-h1 { + font-size: 2.625rem; + } + h2, + .uk-h2 { + font-size: 2rem; + } +} +/* Lists + ========================================================================== */ +ul, +ol { + padding-left: 30px; +} +/* + * Reset margin for nested lists + */ +ul > li > ul, +ul > li > ol, +ol > li > ol, +ol > li > ul { + margin: 0; +} +/* Description lists + ========================================================================== */ +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +/* Horizontal rules + ========================================================================== */ +/* + * 1. Show the overflow in Chrome, Edge and IE. + * 2. Add the correct text-align in Edge and IE. + * 3. Style + */ +hr, +.uk-hr { + /* 1 */ + overflow: visible; + /* 2 */ + text-align: inherit; + /* 3 */ + margin: 0 0 20px 0; + border: 0; + border-top: 1px solid #e5e5e5; +} +/* Add margin if adjacent element */ +* + hr, +* + .uk-hr { + margin-top: 20px; +} +/* Address + ========================================================================== */ +address { + font-style: normal; +} +/* Blockquotes + ========================================================================== */ +blockquote { + margin: 0 0 20px 0; + font-size: 1.25rem; + line-height: 1.5; + font-style: italic; + color: #333; +} +/* Add margin if adjacent element */ +* + blockquote { + margin-top: 20px; +} +/* + * Content + */ +blockquote p:last-of-type { + margin-bottom: 0; +} +blockquote footer { + margin-top: 10px; + font-size: 0.875rem; + line-height: 1.5; + color: #666; +} +blockquote footer::before { + content: "— "; +} +/* Preformatted text + ========================================================================== */ +/* + * 1. Contain overflow in all browsers. + */ +pre { + font: 0.875rem / 1.5 Consolas, monaco, monospace; + color: #666; + -moz-tab-size: 4; + tab-size: 4; + /* 1 */ + overflow: auto; + padding: 10px; + border: 1px solid #e5e5e5; + border-radius: 3px; + background: #fff; +} +pre code { + font-family: Consolas, monaco, monospace; +} +/* Focus + ========================================================================== */ +:focus { + outline: none; +} +:focus-visible { + outline: 2px dotted #333; +} +/* Selection pseudo-element + ========================================================================== */ +::selection { + background: #39f; + color: #fff; + text-shadow: none; +} +/* HTML5 elements + ========================================================================== */ +/* + * 1. Add the correct display in Edge, IE 10+, and Firefox. + * 2. Add the correct display in IE. + */ +details, +main { + /* 2 */ + display: block; +} +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} +/* + * Add the correct display in IE. + */ +template { + display: none; +} +/* Pass media breakpoints to JS + ========================================================================== */ +/* + * Breakpoints + */ +:root { + --uk-breakpoint-s: 640px; + --uk-breakpoint-m: 960px; + --uk-breakpoint-l: 1200px; + --uk-breakpoint-xl: 1600px; +} +/* ======================================================================== + Component: Link + ========================================================================== */ +/* Muted + ========================================================================== */ +a.uk-link-muted, +.uk-link-muted a, +.uk-link-toggle .uk-link-muted { + color: #999; +} +a.uk-link-muted:hover, +.uk-link-muted a:hover, +.uk-link-toggle:hover .uk-link-muted { + color: #666; +} +/* Text + ========================================================================== */ +a.uk-link-text, +.uk-link-text a, +.uk-link-toggle .uk-link-text { + color: inherit; +} +a.uk-link-text:hover, +.uk-link-text a:hover, +.uk-link-toggle:hover .uk-link-text { + color: #999; +} +/* Heading + ========================================================================== */ +a.uk-link-heading, +.uk-link-heading a, +.uk-link-toggle .uk-link-heading { + color: inherit; +} +a.uk-link-heading:hover, +.uk-link-heading a:hover, +.uk-link-toggle:hover .uk-link-heading { + color: #1e87f0; + text-decoration: none; +} +/* Reset + ========================================================================== */ +/* + * `!important` needed to override inverse component + */ +a.uk-link-reset, +.uk-link-reset a { + color: inherit !important; + text-decoration: none !important; +} +/* Toggle + ========================================================================== */ +.uk-link-toggle { + color: inherit !important; + text-decoration: none !important; +} +/* ======================================================================== + Component: Heading + ========================================================================== */ +.uk-heading-small { + font-size: 2.6rem; + line-height: 1.2; +} +.uk-heading-medium { + font-size: 2.8875rem; + line-height: 1.1; +} +.uk-heading-large { + font-size: 3.4rem; + line-height: 1.1; +} +.uk-heading-xlarge { + font-size: 4rem; + line-height: 1; +} +.uk-heading-2xlarge { + font-size: 6rem; + line-height: 1; +} +.uk-heading-3xlarge { + font-size: 8rem; + line-height: 1; +} +/* Tablet Landscape and bigger */ +@media (min-width: 960px) { + .uk-heading-small { + font-size: 3.25rem; + } + .uk-heading-medium { + font-size: 3.5rem; + } + .uk-heading-large { + font-size: 4rem; + } + .uk-heading-xlarge { + font-size: 6rem; + } + .uk-heading-2xlarge { + font-size: 8rem; + } + .uk-heading-3xlarge { + font-size: 11rem; + } +} +/* Laptop and bigger */ +@media (min-width: 1200px) { + .uk-heading-medium { + font-size: 4rem; + } + .uk-heading-large { + font-size: 6rem; + } + .uk-heading-xlarge { + font-size: 8rem; + } + .uk-heading-2xlarge { + font-size: 11rem; + } + .uk-heading-3xlarge { + font-size: 15rem; + } +} +/* Primary + Deprecated: Use `uk-heading-medium` instead + ========================================================================== */ +/* Tablet landscape and bigger */ +/* Desktop and bigger */ +/* Hero + Deprecated: Use `uk-heading-xlarge` instead + ========================================================================== */ +/* Tablet landscape and bigger */ +/* Desktop and bigger */ +/* Divider + ========================================================================== */ +.uk-heading-divider { + padding-bottom: calc(5px + 0.1em); + border-bottom: calc(0.2px + 0.05em) solid #e5e5e5; +} +/* Bullet + ========================================================================== */ +.uk-heading-bullet { + position: relative; +} +/* + * 1. Using `inline-block` to make it work with text alignment + * 2. Center vertically + * 3. Style + */ +.uk-heading-bullet::before { + content: ""; + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + top: calc(-0.1 * 1em); + vertical-align: middle; + /* 3 */ + height: calc(4px + 0.7em); + margin-right: calc(5px + 0.2em); + border-left: calc(5px + 0.1em) solid #e5e5e5; +} +/* Line + ========================================================================== */ +/* + * Clip the child element + */ +.uk-heading-line { + overflow: hidden; +} +/* + * Extra markup is needed to make it work with text align + */ +.uk-heading-line > * { + display: inline-block; + position: relative; +} +/* + * 1. Center vertically + * 2. Make the element as large as possible. It's clipped by the container. + * 3. Style + */ +.uk-heading-line > ::before, +.uk-heading-line > ::after { + content: ""; + /* 1 */ + position: absolute; + top: calc(50% - (calc(0.2px + 0.05em) / 2)); + /* 2 */ + width: 2000px; + /* 3 */ + border-bottom: calc(0.2px + 0.05em) solid #e5e5e5; +} +.uk-heading-line > ::before { + right: 100%; + margin-right: calc(5px + 0.3em); +} +.uk-heading-line > ::after { + left: 100%; + margin-left: calc(5px + 0.3em); +} +/* ======================================================================== + Component: Divider + ========================================================================== */ +/* + * 1. Reset default `hr` + * 2. Set margin if a `div` is used for semantical reason + */ +[class*="uk-divider"] { + /* 1 */ + border: none; + /* 2 */ + margin-bottom: 20px; +} +/* Add margin if adjacent element */ +* + [class*="uk-divider"] { + margin-top: 20px; +} +/* Icon + ========================================================================== */ +.uk-divider-icon { + position: relative; + height: 20px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +.uk-divider-icon::before, +.uk-divider-icon::after { + content: ""; + position: absolute; + top: 50%; + max-width: calc(50% - (50px / 2)); + border-bottom: 1px solid #e5e5e5; +} +.uk-divider-icon::before { + right: calc(50% + (50px / 2)); + width: 100%; +} +.uk-divider-icon::after { + left: calc(50% + (50px / 2)); + width: 100%; +} +/* Small + ========================================================================== */ +/* + * 1. Fix height because of `inline-block` + * 2. Using ::after and inline-block to make `text-align` work + */ +/* 1 */ +.uk-divider-small { + line-height: 0; +} +/* 2 */ +.uk-divider-small::after { + content: ""; + display: inline-block; + width: 100px; + max-width: 100%; + border-top: 1px solid #e5e5e5; + vertical-align: top; +} +/* Vertical + ========================================================================== */ +.uk-divider-vertical { + width: max-content; + height: 100px; + margin-left: auto; + margin-right: auto; + border-left: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: List + ========================================================================== */ +.uk-list { + padding: 0; + list-style: none; +} +/* + * Avoid column break within the list item, when using `column-count` + */ +.uk-list > * { + break-inside: avoid-column; +} +/* + * Remove margin from the last-child + */ +.uk-list > * > :last-child { + margin-bottom: 0; +} +/* + * Style + */ +.uk-list > :nth-child(n+2), +.uk-list > * > ul { + margin-top: 10px; +} +/* Marker modifiers + ========================================================================== */ +.uk-list-disc, +.uk-list-circle, +.uk-list-square, +.uk-list-decimal, +.uk-list-hyphen { + padding-left: 30px; +} +.uk-list-disc { + list-style-type: disc; +} +.uk-list-circle { + list-style-type: circle; +} +.uk-list-square { + list-style-type: square; +} +.uk-list-decimal { + list-style-type: decimal; +} +.uk-list-hyphen { + list-style-type: '– '; +} +/* + * Color modifiers + */ +.uk-list-muted > ::marker { + color: #999 !important; +} +.uk-list-emphasis > ::marker { + color: #333 !important; +} +.uk-list-primary > ::marker { + color: #1e87f0 !important; +} +.uk-list-secondary > ::marker { + color: #222 !important; +} +/* Image bullet modifier + ========================================================================== */ +.uk-list-bullet > * { + position: relative; + padding-left: 30px; +} +.uk-list-bullet > ::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 30px; + height: 1.5em; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +/* Style modifiers + ========================================================================== */ +/* + * Divider + */ +.uk-list-divider > :nth-child(n+2) { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid #e5e5e5; +} +/* + * Striped + */ +.uk-list-striped > * { + padding: 10px 10px; +} +.uk-list-striped > *:nth-of-type(odd) { + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +.uk-list-striped > :nth-of-type(odd) { + background: #f8f8f8; +} +.uk-list-striped > :nth-child(n+2) { + margin-top: 0; +} +/* Size modifier + ========================================================================== */ +.uk-list-large > :nth-child(n+2), +.uk-list-large > * > ul { + margin-top: 20px; +} +.uk-list-collapse > :nth-child(n+2), +.uk-list-collapse > * > ul { + margin-top: 0; +} +/* + * Divider + */ +.uk-list-large.uk-list-divider > :nth-child(n+2) { + margin-top: 20px; + padding-top: 20px; +} +.uk-list-collapse.uk-list-divider > :nth-child(n+2) { + margin-top: 0; + padding-top: 0; +} +/* + * Striped + */ +.uk-list-large.uk-list-striped > * { + padding: 20px 10px; +} +.uk-list-collapse.uk-list-striped > * { + padding-top: 0; + padding-bottom: 0; +} +.uk-list-large.uk-list-striped > :nth-child(n+2), +.uk-list-collapse.uk-list-striped > :nth-child(n+2) { + margin-top: 0; +} +/* ======================================================================== + Component: Description list + ========================================================================== */ +/* + * Term + */ +.uk-description-list > dt { + color: #333; + font-size: 0.875rem; + font-weight: normal; + text-transform: uppercase; +} +.uk-description-list > dt:nth-child(n+2) { + margin-top: 20px; +} +/* + * Description + */ +/* Style modifier + ========================================================================== */ +/* + * Line + */ +.uk-description-list-divider > dt:nth-child(n+2) { + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Table + ========================================================================== */ +/* + * 1. Remove most spacing between table cells. + * 2. Behave like a block element + * 3. Style + */ +.uk-table { + /* 1 */ + border-collapse: collapse; + border-spacing: 0; + /* 2 */ + width: 100%; + /* 3 */ + margin-bottom: 20px; +} +/* Add margin if adjacent element */ +* + .uk-table { + margin-top: 20px; +} +/* Header cell + ========================================================================== */ +/* + * 1. Style + */ +.uk-table th { + padding: 16px 12px; + text-align: left; + vertical-align: bottom; + /* 1 */ + font-size: 0.875rem; + font-weight: normal; + color: #999; + text-transform: uppercase; +} +/* Cell + ========================================================================== */ +.uk-table td { + padding: 16px 12px; + vertical-align: top; +} +/* + * Remove margin from the last-child + */ +.uk-table td > :last-child { + margin-bottom: 0; +} +/* Footer + ========================================================================== */ +.uk-table tfoot { + font-size: 0.875rem; +} +/* Caption + ========================================================================== */ +.uk-table caption { + font-size: 0.875rem; + text-align: left; + color: #999; +} +/* Alignment modifier + ========================================================================== */ +.uk-table-middle, +.uk-table-middle td { + vertical-align: middle !important; +} +/* Style modifiers + ========================================================================== */ +/* + * Divider + */ +.uk-table-divider > tr:not(:first-child), +.uk-table-divider > :not(:first-child) > tr, +.uk-table-divider > :first-child > tr:not(:first-child) { + border-top: 1px solid #e5e5e5; +} +/* + * Striped + */ +.uk-table-striped > tr:nth-of-type(odd), +.uk-table-striped tbody tr:nth-of-type(odd) { + background: #f8f8f8; + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +/* + * Hover + */ +.uk-table-hover > tr:hover, +.uk-table-hover tbody tr:hover { + background: #ffd; +} +/* Active state + ========================================================================== */ +.uk-table > tr.uk-active, +.uk-table tbody tr.uk-active { + background: #ffd; +} +/* Size modifier + ========================================================================== */ +.uk-table-small th, +.uk-table-small td { + padding: 10px 12px; +} +.uk-table-large th, +.uk-table-large td { + padding: 22px 12px; +} +/* Justify modifier + ========================================================================== */ +.uk-table-justify th:first-child, +.uk-table-justify td:first-child { + padding-left: 0; +} +.uk-table-justify th:last-child, +.uk-table-justify td:last-child { + padding-right: 0; +} +/* Cell size modifier + ========================================================================== */ +.uk-table-shrink { + width: 1px; +} +.uk-table-expand { + min-width: 150px; +} +/* Cell link modifier + ========================================================================== */ +/* + * Does not work with `uk-table-justify` at the moment + */ +.uk-table-link { + padding: 0 !important; +} +.uk-table-link > a { + display: block; + padding: 16px 12px; +} +.uk-table-small .uk-table-link > a { + padding: 10px 12px; +} +/* Responsive table + ========================================================================== */ +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-table-responsive, + .uk-table-responsive tbody, + .uk-table-responsive th, + .uk-table-responsive td, + .uk-table-responsive tr { + display: block; + } + .uk-table-responsive thead { + display: none; + } + .uk-table-responsive th, + .uk-table-responsive td { + width: auto !important; + max-width: none !important; + min-width: 0 !important; + overflow: visible !important; + white-space: normal !important; + } + .uk-table-responsive th:not(:first-child):not(.uk-table-link), + .uk-table-responsive td:not(:first-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:first-child) > a { + padding-top: 5px !important; + } + .uk-table-responsive th:not(:last-child):not(.uk-table-link), + .uk-table-responsive td:not(:last-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:last-child) > a { + padding-bottom: 5px !important; + } + .uk-table-justify.uk-table-responsive th, + .uk-table-justify.uk-table-responsive td { + padding-left: 0; + padding-right: 0; + } +} +.uk-table tbody tr { + transition: background-color 0.1s linear; +} +.uk-table-striped > tr:nth-of-type(even):last-child, +.uk-table-striped tbody tr:nth-of-type(even):last-child { + border-bottom: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Icon + ========================================================================== */ +/* + * Note: 1. - 7. is required for `button` elements. Needed for Close and Form Icon component. + * 1. Remove margins in Chrome, Safari and Opera. + * 2. Remove borders for `button`. + * 3. Remove border-radius in Chrome. + * 4. Address `overflow` set to `hidden` in IE. + * 5. Correct `font` properties and `color` not being inherited for `button`. + * 6. Remove the inheritance of text transform in Edge, Firefox, and IE. + * 7. Remove default `button` padding and background color + * 8. Style + * 9. Fill all SVG elements with the current text color if no `fill` attribute is set + * 10. Let the container fit the height of the icon + */ +.uk-icon { + /* 1 */ + margin: 0; + /* 2 */ + border: none; + /* 3 */ + border-radius: 0; + /* 4 */ + overflow: visible; + /* 5 */ + font: inherit; + color: inherit; + /* 6 */ + text-transform: none; + /* 7. */ + padding: 0; + background-color: transparent; + /* 8 */ + display: inline-block; + /* 9 */ + fill: currentcolor; + /* 10 */ + line-height: 0; +} +/* Required for `button`. */ +button.uk-icon:not(:disabled) { + cursor: pointer; +} +/* + * Remove the inner border and padding in Firefox. + */ +.uk-icon::-moz-focus-inner { + border: 0; + padding: 0; +} +/* + * Set the fill and stroke color of all SVG elements to the current text color + */ +.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve) { + fill: currentcolor; +} +.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve) { + stroke: currentcolor; +} +/* + * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835 + */ +.uk-icon > * { + transform: translate(0, 0); +} +/* Image modifier + ========================================================================== */ +/* + * Display images in icon dimensions + * 1. Required for `span` with background image + * 2. Required for `image` + */ +.uk-icon-image { + width: 20px; + height: 20px; + /* 1 */ + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: contain; + vertical-align: middle; + /* 2 */ + object-fit: scale-down; + max-width: none; +} +/* Style modifiers + ========================================================================== */ +/* + * Link + * 1. Allow text within link + */ +.uk-icon-link { + color: #999; + /* 1 */ + text-decoration: none !important; +} +.uk-icon-link:hover { + color: #666; +} +/* OnClick + Active */ +.uk-icon-link:active, +.uk-active > .uk-icon-link { + color: #595959; +} +/* + * Button + * 1. Center icon vertically and horizontally + */ +.uk-icon-button { + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 500px; + background: #f8f8f8; + color: #999; + vertical-align: middle; + /* 1 */ + display: inline-flex; + justify-content: center; + align-items: center; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-icon-button:hover { + background-color: #ebebeb; + color: #666; +} +/* OnClick + Active */ +.uk-icon-button:active, +.uk-active > .uk-icon-button { + background-color: #dfdfdf; + color: #666; +} +/* ======================================================================== + Component: Form Range + ========================================================================== */ +/* + * 1. Remove default style. + * 2. Define consistent box sizing. + * 3. Remove `margin` in all browsers. + * 4. Align to the center of the line box. + * 5. Prevent content overflow if a fixed width is used. + * 6. Take the full width. + * 7. Remove white background in Chrome. + */ +.uk-range { + /* 1 */ + -webkit-appearance: none; + /* 2 */ + box-sizing: border-box; + /* 3 */ + margin: 0; + /* 4 */ + vertical-align: middle; + /* 5 */ + max-width: 100%; + /* 6 */ + width: 100%; + /* 7 */ + background: transparent; +} +/* Focus */ +.uk-range:focus { + outline: none; +} +.uk-range::-moz-focus-outer { + border: none; +} +/* + * Improves consistency of cursor style for clickable elements + */ +.uk-range:not(:disabled)::-webkit-slider-thumb { + cursor: pointer; +} +.uk-range:not(:disabled)::-moz-range-thumb { + cursor: pointer; +} +/* + * Track + * 1. Safari doesn't have a focus state. Using active instead. + */ +/* Webkit */ +.uk-range::-webkit-slider-runnable-track { + height: 3px; + background: #ebebeb; + border-radius: 500px; +} +.uk-range:focus::-webkit-slider-runnable-track, +.uk-range:active::-webkit-slider-runnable-track { + background: #dedede; +} +/* Firefox */ +.uk-range::-moz-range-track { + height: 3px; + background: #ebebeb; + border-radius: 500px; +} +.uk-range:focus::-moz-range-track { + background: #dedede; +} +/* + * Thumb + * 1. Reset + * 2. Style + */ +/* Webkit */ +.uk-range::-webkit-slider-thumb { + /* 1 */ + -webkit-appearance: none; + margin-top: -7px; + /* 2 */ + height: 15px; + width: 15px; + border-radius: 500px; + background: #fff; + border: 1px solid #cccccc; +} +/* Firefox */ +.uk-range::-moz-range-thumb { + /* 1 */ + border: none; + /* 2 */ + height: 15px; + width: 15px; + margin-top: -7px; + border-radius: 500px; + background: #fff; + border: 1px solid #cccccc; +} +/* ======================================================================== + Component: Form + ========================================================================== */ +/* + * 1. Define consistent box sizing. + * Default is `content-box` with following exceptions set to `border-box` + * `select`, `input[type="checkbox"]` and `input[type="radio"]` + * `input[type="search"]` in Chrome, Safari and Opera + * `input[type="color"]` in Firefox + * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera. + * 3. Remove `border-radius` in iOS. + * 4. Change font properties to `inherit` in all browsers. + */ +.uk-input, +.uk-select, +.uk-textarea, +.uk-radio, +.uk-checkbox { + /* 1 */ + box-sizing: border-box; + /* 2 */ + margin: 0; + /* 3 */ + border-radius: 0; + /* 4 */ + font: inherit; +} +/* + * Show the overflow in Edge. + */ +.uk-input { + overflow: visible; +} +/* + * Remove the inheritance of text transform in Firefox. + */ +.uk-select { + text-transform: none; +} +/* + * 1. Change font properties to `inherit` in all browsers + * 2. Don't inherit the `font-weight` and use `bold` instead. + * NOTE: Both declarations don't work in Chrome, Safari and Opera. + */ +.uk-select optgroup { + /* 1 */ + font: inherit; + /* 2 */ + font-weight: bold; +} +/* + * Remove the default vertical scrollbar in IE 10+. + */ +.uk-textarea { + overflow: auto; +} +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X. + */ +.uk-input[type="search"]::-webkit-search-cancel-button, +.uk-input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/* + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +.uk-input[type="number"]::-webkit-inner-spin-button, +.uk-input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/* + * Correct vertical alignment in Safari. + */ +.uk-input[type="date"]::-webkit-datetime-edit, +.uk-input[type="time"]::-webkit-datetime-edit, +.uk-input[type="datetime-local"]::-webkit-datetime-edit { + display: inline-flex; + align-items: center; + height: 100%; + padding: 0; +} +/* + * Removes placeholder transparency in Firefox. + */ +.uk-input::-moz-placeholder, +.uk-textarea::-moz-placeholder { + opacity: 1; +} +/* + * Improves consistency of cursor style for clickable elements + */ +.uk-radio:not(:disabled), +.uk-checkbox:not(:disabled) { + cursor: pointer; +} +/* + * Define consistent border, margin, and padding. + * 1. Reset `min-width` + */ +.uk-fieldset { + border: none; + margin: 0; + padding: 0; + /* 1 */ + min-width: 0; +} +/* Input, select and textarea + * Allowed: `text`, `password`, `datetime-local`, `date`, `month`, + `time`, `week`, `number`, `email`, `url`, `search`, `tel`, `color` + * Disallowed: `range`, `radio`, `checkbox`, `file`, `submit`, `reset` and `image` + ========================================================================== */ +/* + * Remove default style in iOS. + */ +.uk-input, +.uk-textarea { + -webkit-appearance: none; +} +/* + * 1. Prevent content overflow if a fixed width is used + * 2. Take the full width + * 3. Reset default + * 4. Style + */ +.uk-input, +.uk-select, +.uk-textarea { + /* 1 */ + max-width: 100%; + /* 2 */ + width: 100%; + /* 3 */ + border: 0 none; + /* 4 */ + padding: 0 10px; + background: #fff; + color: #666; + border: 1px solid #e5e5e5; + transition: 0.2s ease-in-out; + transition-property: color, background-color, border; +} +/* + * Single-line + * 1. Allow any element to look like an `input` or `select` element + * 2. Make sure line-height is not larger than height + * Also needed to center the text vertically + */ +.uk-input, +.uk-select:not([multiple]):not([size]) { + height: 40px; + vertical-align: middle; + /* 1 */ + display: inline-block; +} +/* 2 */ +.uk-input:not(input), +.uk-select:not(select) { + line-height: 38px; +} +/* + * Multi-line + */ +.uk-select[multiple], +.uk-select[size], +.uk-textarea { + padding-top: 6px; + padding-bottom: 6px; + vertical-align: top; +} +.uk-select[multiple], +.uk-select[size] { + resize: vertical; +} +/* Focus */ +.uk-input:focus, +.uk-select:focus, +.uk-textarea:focus { + outline: none; + background-color: #fff; + color: #666; + border-color: #1e87f0; +} +/* Disabled */ +.uk-input:disabled, +.uk-select:disabled, +.uk-textarea:disabled { + background-color: #f8f8f8; + color: #999; + border-color: #e5e5e5; +} +/* + * Placeholder + */ +.uk-input::placeholder { + color: #999; +} +.uk-textarea::placeholder { + color: #999; +} +/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Small + */ +.uk-form-small { + font-size: 0.875rem; +} +/* Single-line */ +.uk-form-small:not(textarea):not([multiple]):not([size]) { + height: 30px; + padding-left: 8px; + padding-right: 8px; +} +/* Multi-line */ +textarea.uk-form-small, +[multiple].uk-form-small, +[size].uk-form-small { + padding: 5px 8px; +} +.uk-form-small:not(select):not(input):not(textarea) { + line-height: 28px; +} +/* + * Large + */ +.uk-form-large { + font-size: 1.25rem; +} +/* Single-line */ +.uk-form-large:not(textarea):not([multiple]):not([size]) { + height: 55px; + padding-left: 12px; + padding-right: 12px; +} +/* Multi-line */ +textarea.uk-form-large, +[multiple].uk-form-large, +[size].uk-form-large { + padding: 7px 12px; +} +.uk-form-large:not(select):not(input):not(textarea) { + line-height: 53px; +} +/* Style modifier (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Error + */ +.uk-form-danger, +.uk-form-danger:focus { + color: #f0506e; + border-color: #f0506e; +} +/* + * Success + */ +.uk-form-success, +.uk-form-success:focus { + color: #32d296; + border-color: #32d296; +} +/* + * Blank + */ +.uk-form-blank { + background: none; + border-color: transparent; +} +.uk-form-blank:focus { + border-color: #e5e5e5; + border-style: solid; +} +/* Width modifiers (`uk-input`, `uk-select` and `uk-textarea`) + ========================================================================== */ +/* + * Fixed widths + * Different widths for mini sized `input` and `select` elements + */ +input.uk-form-width-xsmall { + width: 50px; +} +select.uk-form-width-xsmall { + width: 75px; +} +.uk-form-width-small { + width: 130px; +} +.uk-form-width-medium { + width: 200px; +} +.uk-form-width-large { + width: 500px; +} +/* Select + ========================================================================== */ +/* + * 1. Remove default style. Also works in Firefox + * 2. Style + * 3. Set `color` for options in the select dropdown, because the inherited `color` might be too light. + */ +.uk-select:not([multiple]):not([size]) { + /* 1 */ + -webkit-appearance: none; + -moz-appearance: none; + /* 2 */ + padding-right: 20px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); + background-repeat: no-repeat; + background-position: 100% 50%; +} +/* 3 */ +.uk-select:not([multiple]):not([size]) option { + color: #666; +} +/* + * Disabled + */ +.uk-select:not([multiple]):not([size]):disabled { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +/* Datalist + ========================================================================== */ +/* + * 1. Remove default style in Chrome + */ +.uk-input[list] { + padding-right: 20px; + background-repeat: no-repeat; + background-position: 100% 50%; +} +.uk-input[list]:hover, +.uk-input[list]:focus { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +/* 1 */ +.uk-input[list]::-webkit-calendar-picker-indicator { + display: none !important; +} +/* Radio and checkbox + ========================================================================== */ +/* + * 1. Style + * 2. Make box more robust so it clips the child element + * 3. Vertical alignment + * 4. Remove default style + * 5. Fix black background on iOS + * 6. Center icons + */ +.uk-radio, +.uk-checkbox { + /* 1 */ + display: inline-block; + height: 16px; + width: 16px; + /* 2 */ + overflow: hidden; + /* 3 */ + margin-top: -4px; + vertical-align: middle; + /* 4 */ + -webkit-appearance: none; + -moz-appearance: none; + /* 5 */ + background-color: transparent; + /* 6 */ + background-repeat: no-repeat; + background-position: 50% 50%; + border: 1px solid #cccccc; + transition: 0.2s ease-in-out; + transition-property: background-color, border; +} +.uk-radio { + border-radius: 50%; +} +/* Focus */ +.uk-radio:focus, +.uk-checkbox:focus { + background-color: rgba(0, 0, 0, 0); + outline: none; + border-color: #1e87f0; +} +/* + * Checked + */ +.uk-radio:checked, +.uk-checkbox:checked, +.uk-checkbox:indeterminate { + background-color: #1e87f0; + border-color: transparent; +} +/* Focus */ +.uk-radio:checked:focus, +.uk-checkbox:checked:focus, +.uk-checkbox:indeterminate:focus { + background-color: #0e6dcd; +} +/* + * Icons + */ +.uk-radio:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-checkbox:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-checkbox:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* + * Disabled + */ +.uk-radio:disabled, +.uk-checkbox:disabled { + background-color: #f8f8f8; + border-color: #e5e5e5; +} +.uk-radio:disabled:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-checkbox:disabled:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-checkbox:disabled:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* Legend + ========================================================================== */ +/* + * Legend + * 1. Behave like block element + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove padding so people aren't caught out if they zero out fieldsets. + * 4. Style + */ +.uk-legend { + /* 1 */ + width: 100%; + /* 2 */ + color: inherit; + /* 3 */ + padding: 0; + /* 4 */ + font-size: 1.5rem; + line-height: 1.4; +} +/* Custom controls + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Behave like most inline-block elements + */ +.uk-form-custom { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + vertical-align: middle; +} +/* + * 1. Position and resize the form control to always cover its container + * 2. Required for Firefox for positioning to the left + * 3. Required for Webkit to make `height` work + * 4. Hide controls and show cursor + * 5. Needed for the cursor + * 6. Clip height caused by 5. Needed for Webkit only + */ +.uk-form-custom select, +.uk-form-custom input[type="file"] { + /* 1 */ + position: absolute; + top: 0; + z-index: 1; + width: 100%; + height: 100%; + /* 2 */ + left: 0; + /* 3 */ + -webkit-appearance: none; + /* 4 */ + opacity: 0; + cursor: pointer; +} +.uk-form-custom input[type="file"] { + /* 5 */ + font-size: 500px; + /* 6 */ + overflow: hidden; +} +/* Label + ========================================================================== */ +.uk-form-label { + color: #333; + font-size: 0.875rem; +} +/* Layout + ========================================================================== */ +/* + * Stacked + */ +.uk-form-stacked .uk-form-label { + display: block; + margin-bottom: 5px; +} +/* + * Horizontal + */ +/* Tablet portrait and smaller */ +@media (max-width: 959px) { + /* Behave like `uk-form-stacked` */ + .uk-form-horizontal .uk-form-label { + display: block; + margin-bottom: 5px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-form-horizontal .uk-form-label { + width: 200px; + margin-top: 7px; + float: left; + } + .uk-form-horizontal .uk-form-controls { + margin-left: 215px; + } + /* Better vertical alignment if controls are checkboxes and radio buttons with text */ + .uk-form-horizontal .uk-form-controls-text { + padding-top: 7px; + } +} +/* Icons + ========================================================================== */ +/* + * 1. Set position + * 2. Set width + * 3. Center icon vertically and horizontally + * 4. Style + */ +.uk-form-icon { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + left: 0; + /* 2 */ + width: 40px; + /* 3 */ + display: inline-flex; + justify-content: center; + align-items: center; + /* 4 */ + color: #999; +} +/* + * Required for `a`. + */ +.uk-form-icon:hover { + color: #666; +} +/* + * Make `input` element clickable through icon, e.g. if it's a `span` + */ +.uk-form-icon:not(a):not(button):not(input) { + pointer-events: none; +} +/* + * Input padding + */ +.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input { + padding-left: 40px !important; +} +/* + * Position modifier + */ +.uk-form-icon-flip { + right: 0; + left: auto; +} +.uk-form-icon-flip ~ .uk-input { + padding-right: 40px !important; +} +/* ======================================================================== + Component: Button + ========================================================================== */ +/* + * 1. Remove margins in Chrome, Safari and Opera. + * 2. Remove borders for `button`. + * 3. Address `overflow` set to `hidden` in IE. + * 4. Correct `font` properties and `color` not being inherited for `button`. + * 5. Remove the inheritance of text transform in Edge, Firefox, and IE. + * 6. Remove default style for `input type="submit"`in iOS. + * 7. Style + * 8. `line-height` is used to create a height because it also centers the text vertically for `a` elements. + * Better would be to use height and flexbox to center the text vertically but flexbox doesn't work in Firefox on `button` elements. + * 9. Align text if button has a width + * 10. Required for `a`. + */ +.uk-button { + /* 1 */ + margin: 0; + /* 2 */ + border: none; + /* 3 */ + overflow: visible; + /* 4 */ + font: inherit; + color: inherit; + /* 5 */ + text-transform: none; + /* 6 */ + -webkit-appearance: none; + border-radius: 0; + /* 7 */ + display: inline-block; + box-sizing: border-box; + padding: 0 30px; + vertical-align: middle; + font-size: 0.875rem; + /* 8 */ + line-height: 38px; + /* 9 */ + text-align: center; + /* 10 */ + text-decoration: none; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color, border-color; +} +.uk-button:not(:disabled) { + cursor: pointer; +} +/* + * Remove the inner border and padding in Firefox. + */ +.uk-button::-moz-focus-inner { + border: 0; + padding: 0; +} +/* Hover */ +.uk-button:hover { + /* 9 */ + text-decoration: none; +} +/* OnClick + Active */ +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-button-default { + background-color: transparent; + color: #333; + border: 1px solid #e5e5e5; +} +/* Hover */ +.uk-button-default:hover { + background-color: transparent; + color: #333; + border-color: #b2b2b2; +} +/* OnClick + Active */ +.uk-button-default:active, +.uk-button-default.uk-active { + background-color: transparent; + color: #333; + border-color: #999999; +} +/* + * Primary + */ +.uk-button-primary { + background-color: #1e87f0; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-primary:hover { + background-color: #0f7ae5; + color: #fff; +} +/* OnClick + Active */ +.uk-button-primary:active, +.uk-button-primary.uk-active { + background-color: #0e6dcd; + color: #fff; +} +/* + * Secondary + */ +.uk-button-secondary { + background-color: #222; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-secondary:hover { + background-color: #151515; + color: #fff; +} +/* OnClick + Active */ +.uk-button-secondary:active, +.uk-button-secondary.uk-active { + background-color: #080808; + color: #fff; +} +/* + * Danger + */ +.uk-button-danger { + background-color: #f0506e; + color: #fff; + border: 1px solid transparent; +} +/* Hover */ +.uk-button-danger:hover { + background-color: #ee395b; + color: #fff; +} +/* OnClick + Active */ +.uk-button-danger:active, +.uk-button-danger.uk-active { + background-color: #ec2147; + color: #fff; +} +/* + * Disabled + * The same for all style modifiers + */ +.uk-button-default:disabled, +.uk-button-primary:disabled, +.uk-button-secondary:disabled, +.uk-button-danger:disabled { + background-color: transparent; + color: #999; + border-color: #e5e5e5; +} +/* Size modifiers + ========================================================================== */ +.uk-button-small { + padding: 0 15px; + line-height: 28px; + font-size: 0.875rem; +} +.uk-button-large { + padding: 0 40px; + line-height: 53px; + font-size: 0.875rem; +} +/* Text modifiers + ========================================================================== */ +/* + * Text + * 1. Reset + * 2. Style + */ +.uk-button-text { + /* 1 */ + padding: 0; + line-height: 1.5; + background: none; + /* 2 */ + color: #333; + position: relative; +} +.uk-button-text::before { + content: ""; + position: absolute; + bottom: 0; + left: 0; + right: 100%; + border-bottom: 1px solid currentColor; + transition: right 0.3s ease-out; +} +/* Hover */ +.uk-button-text:hover { + color: #333; +} +.uk-button-text:hover::before { + right: 0; +} +/* Disabled */ +.uk-button-text:disabled { + color: #999; +} +.uk-button-text:disabled::before { + display: none; +} +/* + * Link + * 1. Reset + * 2. Style + */ +.uk-button-link { + /* 1 */ + padding: 0; + line-height: 1.5; + background: none; + /* 2 */ + color: #333; +} +/* Hover */ +.uk-button-link:hover { + color: #999; + text-decoration: none; +} +/* Disabled */ +.uk-button-link:disabled { + color: #999; + text-decoration: none; +} +/* Group + ========================================================================== */ +/* + * 1. Using `flex` instead of `inline-block` to prevent whitespace between child elements + * 2. Behave like button + * 3. Create position context + */ +.uk-button-group { + /* 1 */ + display: inline-flex; + /* 2 */ + vertical-align: middle; + /* 3 */ + position: relative; +} +/* Group + ========================================================================== */ +/* + * Collapse border + */ +.uk-button-group > .uk-button:nth-child(n+2), +.uk-button-group > div:nth-child(n+2) .uk-button { + margin-left: -1px; +} +/* + * Create position context to superimpose the successor elements border + * Known issue: If you use an `a` element as button and an icon inside, + * the active state will not work if you click the icon inside the button + * Workaround: Just use a `button` or `input` element as button + */ +.uk-button-group .uk-button:hover, +.uk-button-group .uk-button:focus, +.uk-button-group .uk-button:active, +.uk-button-group .uk-button.uk-active { + position: relative; + z-index: 1; +} +/* ======================================================================== + Component: Progress + ========================================================================== */ +/* + * 1. Add the correct vertical alignment in all browsers. + * 2. Behave like a block element. + * 3. Remove borders in Firefox. + * 4. Remove default style in Chrome, Safari and Edge. + * 5. Style + */ +.uk-progress { + /* 1 */ + vertical-align: baseline; + /* 2 */ + display: block; + width: 100%; + /* 3 */ + border: 0; + /* 4 */ + background-color: #f8f8f8; + /* 5 */ + margin-bottom: 20px; + height: 15px; + border-radius: 500px; + overflow: hidden; +} +/* Add margin if adjacent element */ +* + .uk-progress { + margin-top: 20px; +} +/* + * Show background color set on `uk-progress` in Chrome, Safari and Edge. + */ +.uk-progress::-webkit-progress-bar { + background-color: transparent; +} +/* + * Progress Bar + * 1. Transitions don't work on `::-moz-progress-bar` pseudo element in Firefox yet. + * https://bugzilla.mozilla.org/show_bug.cgi?id=662351 + */ +.uk-progress::-webkit-progress-value { + background-color: #1e87f0; + transition: width 0.6s ease; +} +.uk-progress::-moz-progress-bar { + background-color: #1e87f0; + /* 1 */ + transition: width 0.6s ease; +} +/* ======================================================================== + Component: Section + ========================================================================== */ +/* + * 1. Make it work with `100vh` and height in general + */ +.uk-section { + display: flow-root; + box-sizing: border-box; + /* 1 */ + padding-top: 40px; + padding-bottom: 40px; +} +/* Desktop and bigger */ +@media (min-width: 960px) { + .uk-section { + padding-top: 70px; + padding-bottom: 70px; + } +} +/* + * Remove margin from the last-child + */ +.uk-section > :last-child { + margin-bottom: 0; +} +/* Size modifiers + ========================================================================== */ +/* + * XSmall + */ +.uk-section-xsmall { + padding-top: 20px; + padding-bottom: 20px; +} +/* + * Small + */ +.uk-section-small { + padding-top: 40px; + padding-bottom: 40px; +} +/* + * Large + */ +.uk-section-large { + padding-top: 70px; + padding-bottom: 70px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-section-large { + padding-top: 140px; + padding-bottom: 140px; + } +} +/* + * XLarge + */ +.uk-section-xlarge { + padding-top: 140px; + padding-bottom: 140px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-section-xlarge { + padding-top: 210px; + padding-bottom: 210px; + } +} +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-section-default { + --uk-inverse: dark; + background: #fff; +} +/* + * Muted + */ +.uk-section-muted { + --uk-inverse: dark; + background: #f8f8f8; +} +/* + * Primary + */ +.uk-section-primary { + --uk-inverse: light; + background: #1e87f0; +} +/* + * Secondary + */ +.uk-section-secondary { + --uk-inverse: light; + background: #222; +} +/* Overlap modifier + ========================================================================== */ +/* + * Reserved modifier to make a section overlap another section with an border image + * Implemented by the theme + */ +/* ======================================================================== + Component: Container + ========================================================================== */ +/* + * 1. Box sizing has to be `content-box` so the max-width is always the same and + * unaffected by the padding on different breakpoints. It's important for the size modifiers. + */ +.uk-container { + display: flow-root; + /* 1 */ + box-sizing: content-box; + max-width: 1200px; + margin-left: auto; + margin-right: auto; + padding-left: 15px; + padding-right: 15px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container { + padding-left: 30px; + padding-right: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container { + padding-left: 40px; + padding-right: 40px; + } +} +/* + * Remove margin from the last-child + */ +.uk-container > :last-child { + margin-bottom: 0; +} +/* + * Remove padding from nested containers + */ +.uk-container .uk-container { + padding-left: 0; + padding-right: 0; +} +/* Size modifier + ========================================================================== */ +.uk-container-xsmall { + max-width: 750px; +} +.uk-container-small { + max-width: 900px; +} +.uk-container-large { + max-width: 1400px; +} +.uk-container-xlarge { + max-width: 1600px; +} +.uk-container-expand { + max-width: none; +} +/* Expand modifier + ========================================================================== */ +/* + * Expand one side only + */ +.uk-container-expand-left { + margin-left: 0; +} +.uk-container-expand-right { + margin-right: 0; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container-expand-left.uk-container-xsmall, + .uk-container-expand-right.uk-container-xsmall { + max-width: calc(50% + (750px / 2) - 30px); + } + .uk-container-expand-left.uk-container-small, + .uk-container-expand-right.uk-container-small { + max-width: calc(50% + (900px / 2) - 30px); + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container-expand-left, + .uk-container-expand-right { + max-width: calc(50% + (1200px / 2) - 40px); + } + .uk-container-expand-left.uk-container-xsmall, + .uk-container-expand-right.uk-container-xsmall { + max-width: calc(50% + (750px / 2) - 40px); + } + .uk-container-expand-left.uk-container-small, + .uk-container-expand-right.uk-container-small { + max-width: calc(50% + (900px / 2) - 40px); + } + .uk-container-expand-left.uk-container-large, + .uk-container-expand-right.uk-container-large { + max-width: calc(50% + (1400px / 2) - 40px); + } + .uk-container-expand-left.uk-container-xlarge, + .uk-container-expand-right.uk-container-xlarge { + max-width: calc(50% + (1600px / 2) - 40px); + } +} +/* Item + ========================================================================== */ +/* + * Utility classes to reset container padding on the left or right side + * Note: It has to be negative margin on the item, because it's specific to the item. + */ +.uk-container-item-padding-remove-left, +.uk-container-item-padding-remove-right { + width: calc(100% + 15px); +} +.uk-container-item-padding-remove-left { + margin-left: -15px; +} +.uk-container-item-padding-remove-right { + margin-right: -15px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-container-item-padding-remove-left, + .uk-container-item-padding-remove-right { + width: calc(100% + 30px); + } + .uk-container-item-padding-remove-left { + margin-left: -30px; + } + .uk-container-item-padding-remove-right { + margin-right: -30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-container-item-padding-remove-left, + .uk-container-item-padding-remove-right { + width: calc(100% + 40px); + } + .uk-container-item-padding-remove-left { + margin-left: -40px; + } + .uk-container-item-padding-remove-right { + margin-right: -40px; + } +} +/* ======================================================================== + Component: Tile + ========================================================================== */ +.uk-tile { + display: flow-root; + position: relative; + box-sizing: border-box; + padding-left: 15px; + padding-right: 15px; + padding-top: 40px; + padding-bottom: 40px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-tile { + padding-left: 30px; + padding-right: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile { + padding-left: 40px; + padding-right: 40px; + padding-top: 70px; + padding-bottom: 70px; + } +} +/* + * Remove margin from the last-child + */ +.uk-tile > :last-child { + margin-bottom: 0; +} +/* Size modifiers + ========================================================================== */ +/* + * XSmall + */ +.uk-tile-xsmall { + padding-top: 20px; + padding-bottom: 20px; +} +/* + * Small + */ +.uk-tile-small { + padding-top: 40px; + padding-bottom: 40px; +} +/* + * Large + */ +.uk-tile-large { + padding-top: 70px; + padding-bottom: 70px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile-large { + padding-top: 140px; + padding-bottom: 140px; + } +} +/* + * XLarge + */ +.uk-tile-xlarge { + padding-top: 140px; + padding-bottom: 140px; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-tile-xlarge { + padding-top: 210px; + padding-bottom: 210px; + } +} +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-tile-default { + --uk-inverse: dark; + background-color: #fff; +} +/* + * Muted + */ +.uk-tile-muted { + --uk-inverse: dark; + background-color: #f8f8f8; +} +/* + * Primary + */ +.uk-tile-primary { + --uk-inverse: light; + background-color: #1e87f0; +} +/* + * Secondary + */ +.uk-tile-secondary { + --uk-inverse: light; + background-color: #222; +} +/* ======================================================================== + Component: Card + ========================================================================== */ +.uk-card { + position: relative; + box-sizing: border-box; + transition: box-shadow 0.1s ease-in-out; +} +/* Sections + ========================================================================== */ +.uk-card-body { + display: flow-root; + padding: 30px 30px; +} +.uk-card-header { + display: flow-root; + padding: 15px 30px; +} +.uk-card-footer { + display: flow-root; + padding: 15px 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-body { + padding: 40px 40px; + } + .uk-card-header { + padding: 20px 40px; + } + .uk-card-footer { + padding: 20px 40px; + } +} +/* + * Remove margin from the last-child + */ +.uk-card-body > :last-child, +.uk-card-header > :last-child, +.uk-card-footer > :last-child { + margin-bottom: 0; +} +/* Media + ========================================================================== */ +/* + * Reserved alignment modifier to style the media element, e.g. with `border-radius` + * Implemented by the theme + */ +/* Title + ========================================================================== */ +.uk-card-title { + font-size: 1.5rem; + line-height: 1.4; +} +/* Badge + ========================================================================== */ +/* + * 1. Position + * 2. Size + * 3. Style + * 4. Center child vertically + */ +.uk-card-badge { + /* 1 */ + position: absolute; + top: 15px; + right: 15px; + z-index: 1; + /* 2 */ + height: 22px; + padding: 0 10px; + /* 3 */ + background: #1e87f0; + color: #fff; + font-size: 0.875rem; + /* 4 */ + display: flex; + justify-content: center; + align-items: center; + line-height: 0; + border-radius: 2px; + text-transform: uppercase; +} +/* + * Remove margin from adjacent element + */ +.uk-card-badge:first-child + * { + margin-top: 0; +} +/* Hover modifier + ========================================================================== */ +.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover { + background-color: #fff; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* Style modifiers + ========================================================================== */ +/* + * Default + * Note: Header and Footer are only implemented for the default style + */ +.uk-card-default { + --uk-inverse: dark; + background-color: #fff; + color: #666; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-default .uk-card-title { + color: #333; +} +.uk-card-default.uk-card-hover:hover { + background-color: #fff; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-card-default .uk-card-header { + border-bottom: 1px solid #e5e5e5; +} +.uk-card-default .uk-card-footer { + border-top: 1px solid #e5e5e5; +} +/* + * Primary + */ +.uk-card-primary { + --uk-inverse: light; + background-color: #1e87f0; + color: #fff; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-primary .uk-card-title { + color: #fff; +} +.uk-card-primary.uk-card-hover:hover { + background-color: #1e87f0; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* + * Secondary + */ +.uk-card-secondary { + --uk-inverse: light; + background-color: #222; + color: #fff; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-card-secondary .uk-card-title { + color: #fff; +} +.uk-card-secondary.uk-card-hover:hover { + background-color: #222; + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +/* Size modifier + ========================================================================== */ +/* + * Small + */ +.uk-card-small.uk-card-body, +.uk-card-small .uk-card-body { + padding: 20px 20px; +} +.uk-card-small .uk-card-header { + padding: 13px 20px; +} +.uk-card-small .uk-card-footer { + padding: 13px 20px; +} +/* + * Large + */ +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-large.uk-card-body, + .uk-card-large .uk-card-body { + padding: 70px 70px; + } + .uk-card-large .uk-card-header { + padding: 35px 70px; + } + .uk-card-large .uk-card-footer { + padding: 35px 70px; + } +} +/* + * Default + */ +.uk-card-body > .uk-nav-default { + margin-left: -30px; + margin-right: -30px; +} +.uk-card-body > .uk-nav-default:only-child { + margin-top: -15px; + margin-bottom: -15px; +} +.uk-card-body > .uk-nav-default > li > a, +.uk-card-body > .uk-nav-default .uk-nav-header, +.uk-card-body > .uk-nav-default .uk-nav-divider { + padding-left: 30px; + padding-right: 30px; +} +.uk-card-body > .uk-nav-default .uk-nav-sub { + padding-left: 45px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-body > .uk-nav-default { + margin-left: -40px; + margin-right: -40px; + } + .uk-card-body > .uk-nav-default:only-child { + margin-top: -25px; + margin-bottom: -25px; + } + .uk-card-body > .uk-nav-default > li > a, + .uk-card-body > .uk-nav-default .uk-nav-header, + .uk-card-body > .uk-nav-default .uk-nav-divider { + padding-left: 40px; + padding-right: 40px; + } + .uk-card-body > .uk-nav-default .uk-nav-sub { + padding-left: 55px; + } +} +/* + * Small + */ +.uk-card-small > .uk-nav-default { + margin-left: -20px; + margin-right: -20px; +} +.uk-card-small > .uk-nav-default:only-child { + margin-top: -5px; + margin-bottom: -5px; +} +.uk-card-small > .uk-nav-default > li > a, +.uk-card-small > .uk-nav-default .uk-nav-header, +.uk-card-small > .uk-nav-default .uk-nav-divider { + padding-left: 20px; + padding-right: 20px; +} +.uk-card-small > .uk-nav-default .uk-nav-sub { + padding-left: 35px; +} +/* + * Large + */ +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-card-large > .uk-nav-default { + margin: 0; + } + .uk-card-large > .uk-nav-default:only-child { + margin: 0; + } + .uk-card-large > .uk-nav-default > li > a, + .uk-card-large > .uk-nav-default .uk-nav-header, + .uk-card-large > .uk-nav-default .uk-nav-divider { + padding-left: 0; + padding-right: 0; + } + .uk-card-large > .uk-nav-default .uk-nav-sub { + padding-left: 15px; + } +} +/* ======================================================================== + Component: Close + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-close { + color: #999; + transition: 0.1s ease-in-out; + transition-property: color, opacity; +} +/* Hover */ +.uk-close:hover { + color: #666; +} +/* ======================================================================== + Component: Spinner + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +/* SVG + ========================================================================== */ +.uk-spinner > * { + animation: uk-spinner-rotate 1.4s linear infinite; +} +@keyframes uk-spinner-rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(270deg); + } +} +/* + * Circle + */ +.uk-spinner > * > * { + stroke-dasharray: 88px; + stroke-dashoffset: 0; + transform-origin: center; + animation: uk-spinner-dash 1.4s ease-in-out infinite; + stroke-width: 1; + stroke-linecap: round; +} +@keyframes uk-spinner-dash { + 0% { + stroke-dashoffset: 88px; + } + 50% { + stroke-dashoffset: 22px; + transform: rotate(135deg); + } + 100% { + stroke-dashoffset: 88px; + transform: rotate(450deg); + } +} +/* ======================================================================== + Component: Totop + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-totop { + padding: 5px; + color: #999; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-totop:hover { + color: #666; +} +/* OnClick */ +.uk-totop:active { + color: #333; +} +/* ======================================================================== + Component: Marker + ========================================================================== */ +/* + * Addopts `uk-icon` + */ +.uk-marker { + padding: 5px; + background: #222; + color: #fff; + border-radius: 500px; +} +/* Hover */ +.uk-marker:hover { + color: #fff; +} +/* ======================================================================== + Component: Alert + ========================================================================== */ +.uk-alert { + position: relative; + margin-bottom: 20px; + padding: 15px 29px 15px 15px; + background: #f8f8f8; + color: #666; +} +/* Add margin if adjacent element */ +* + .uk-alert { + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-alert > :last-child { + margin-bottom: 0; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-alert-close { + position: absolute; + top: 20px; + right: 15px; + color: inherit; + opacity: 0.4; +} +/* + * Remove margin from adjacent element + */ +.uk-alert-close:first-child + * { + margin-top: 0; +} +/* + * Hover + */ +.uk-alert-close:hover { + color: inherit; + opacity: 0.8; +} +/* Style modifiers + ========================================================================== */ +/* + * Primary + */ +.uk-alert-primary { + background: #d8eafc; + color: #1e87f0; +} +/* + * Success + */ +.uk-alert-success { + background: #edfbf6; + color: #32d296; +} +/* + * Warning + */ +.uk-alert-warning { + background: #fff6ee; + color: #faa05a; +} +/* + * Danger + */ +.uk-alert-danger { + background: #fef4f6; + color: #f0506e; +} +/* + * Content + */ +.uk-alert h1, +.uk-alert h2, +.uk-alert h3, +.uk-alert h4, +.uk-alert h5, +.uk-alert h6 { + color: inherit; +} +.uk-alert a:not([class]) { + color: inherit; + text-decoration: underline; +} +.uk-alert a:not([class]):hover { + color: inherit; + text-decoration: underline; +} +/* ======================================================================== + Component: Placeholder + ========================================================================== */ +.uk-placeholder { + margin-bottom: 20px; + padding: 30px 30px; + background: transparent; + border: 1px dashed #e5e5e5; +} +/* Add margin if adjacent element */ +* + .uk-placeholder { + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-placeholder > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Badge + ========================================================================== */ +/* + * 1. Style + * 2. Center child vertically and horizontally + */ +.uk-badge { + box-sizing: border-box; + min-width: 18px; + height: 18px; + padding: 0 5px; + border-radius: 500px; + vertical-align: middle; + /* 1 */ + background: #1e87f0; + color: #fff !important; + font-size: 11px; + /* 2 */ + display: inline-flex; + justify-content: center; + align-items: center; + line-height: 0; +} +/* + * Required for `a` + */ +.uk-badge:hover { + text-decoration: none; +} +/* ======================================================================== + Component: Label + ========================================================================== */ +.uk-label { + display: inline-block; + padding: 0 10px; + background: #1e87f0; + line-height: 1.5; + font-size: 0.875rem; + color: #fff; + vertical-align: middle; + white-space: nowrap; + border-radius: 2px; + text-transform: uppercase; +} +/* Color modifiers + ========================================================================== */ +/* + * Success + */ +.uk-label-success { + background-color: #32d296; + color: #fff; +} +/* + * Warning + */ +.uk-label-warning { + background-color: #faa05a; + color: #fff; +} +/* + * Danger + */ +.uk-label-danger { + background-color: #f0506e; + color: #fff; +} +/* ======================================================================== + Component: Overlay + ========================================================================== */ +.uk-overlay { + padding: 30px 30px; +} +/* + * Remove margin from the last-child + */ +.uk-overlay > :last-child { + margin-bottom: 0; +} +/* Icon + ========================================================================== */ +/* Style modifiers + ========================================================================== */ +/* + * Default + */ +.uk-overlay-default { + --uk-inverse: dark; + background: rgba(255, 255, 255, 0.8); +} +/* + * Primary + */ +.uk-overlay-primary { + --uk-inverse: light; + background: rgba(34, 34, 34, 0.8); +} +/* ======================================================================== + Component: Article + ========================================================================== */ +.uk-article { + display: flow-root; +} +/* + * Remove margin from the last-child + */ +.uk-article > :last-child { + margin-bottom: 0; +} +/* Adjacent sibling + ========================================================================== */ +.uk-article + .uk-article { + margin-top: 70px; +} +/* Title + ========================================================================== */ +.uk-article-title { + font-size: 2.23125rem; + line-height: 1.2; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-article-title { + font-size: 2.625rem; + } +} +/* Meta + ========================================================================== */ +.uk-article-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +.uk-article-meta a { + color: #999; +} +.uk-article-meta a:hover { + color: #666; + text-decoration: none; +} +/* ======================================================================== + Component: Comment + ========================================================================== */ +/* Sections + ========================================================================== */ +.uk-comment-body { + display: flow-root; + overflow-wrap: break-word; + word-wrap: break-word; +} +.uk-comment-header { + display: flow-root; + margin-bottom: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-comment-body > :last-child, +.uk-comment-header > :last-child { + margin-bottom: 0; +} +/* Title + ========================================================================== */ +.uk-comment-title { + font-size: 1.25rem; + line-height: 1.4; +} +/* Meta + ========================================================================== */ +.uk-comment-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +/* Avatar + ========================================================================== */ +/* List + ========================================================================== */ +.uk-comment-list { + padding: 0; + list-style: none; +} +/* Adjacent siblings */ +.uk-comment-list > :nth-child(n+2) { + margin-top: 70px; +} +/* + * Sublists + * Note: General sibling selector allows reply block between comment and sublist + */ +.uk-comment-list .uk-comment ~ ul { + margin: 70px 0 0 0; + padding-left: 30px; + list-style: none; +} +/* Tablet and bigger */ +@media (min-width: 960px) { + .uk-comment-list .uk-comment ~ ul { + padding-left: 100px; + } +} +/* Adjacent siblings */ +.uk-comment-list .uk-comment ~ ul > :nth-child(n+2) { + margin-top: 70px; +} +/* Style modifier + ========================================================================== */ +.uk-comment-primary { + padding: 30px; + background-color: #f8f8f8; +} +/* ======================================================================== + Component: Search + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Reset `form` + */ +.uk-search { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + margin: 0; +} +/* Input + ========================================================================== */ +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X. + */ +.uk-search-input::-webkit-search-cancel-button, +.uk-search-input::-webkit-search-decoration { + -webkit-appearance: none; +} +/* + * Removes placeholder transparency in Firefox. + */ +.uk-search-input::-moz-placeholder { + opacity: 1; +} +/* + * 1. Define consistent box sizing. + * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera. + * 3. Remove `border-radius` in iOS. + * 4. Change font properties to `inherit` in all browsers + * 5. Show the overflow in Edge. + * 6. Remove default style in iOS. + * 7. Vertical alignment + * 8. Take the full container width + * 9. Style + */ +.uk-search-input { + /* 1 */ + box-sizing: border-box; + /* 2 */ + margin: 0; + /* 3 */ + border-radius: 0; + /* 4 */ + font: inherit; + /* 5 */ + overflow: visible; + /* 6 */ + -webkit-appearance: none; + /* 7 */ + vertical-align: middle; + /* 8 */ + width: 100%; + /* 9 */ + border: none; + color: #666; +} +.uk-search-input:focus { + outline: none; +} +/* Placeholder */ +.uk-search-input::placeholder { + color: #999; +} +/* Icon (Adopts `uk-icon`) + ========================================================================== */ +/* + * Position above input + * 1. Set position + * 2. Center icon vertically and horizontally + * 3. Style + */ +.uk-search .uk-search-icon { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + left: 0; + /* 2 */ + display: inline-flex; + justify-content: center; + align-items: center; + /* 3 */ + color: #999; +} +/* + * Required for `a`. + */ +.uk-search .uk-search-icon:hover { + color: #999; +} +/* + * Make `input` element clickable through icon, e.g. if it's a `span` + */ +.uk-search .uk-search-icon:not(a):not(button):not(input) { + pointer-events: none; +} +/* + * Position modifier + */ +.uk-search .uk-search-icon-flip { + right: 0; + left: auto; +} +/* Default modifier + ========================================================================== */ +.uk-search-default { + width: 240px; +} +/* + * Input + */ +.uk-search-default .uk-search-input { + height: 40px; + padding-left: 10px; + padding-right: 10px; + background: transparent; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-default .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-default .uk-search-icon { + padding-left: 10px; + padding-right: 10px; +} +.uk-search-default:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-left: 40px; +} +.uk-search-default:has(.uk-search-icon-flip) .uk-search-input { + padding-right: 40px; +} +/* Navbar modifier + ========================================================================== */ +.uk-search-navbar { + width: 240px; +} +/* + * Input + */ +.uk-search-navbar .uk-search-input { + height: 40px; + padding-left: 10px; + padding-right: 10px; + background: #fff; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-navbar .uk-search-input:focus { + background-color: #fff; + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-navbar .uk-search-icon { + padding-left: 10px; + padding-right: 10px; +} +.uk-search-navbar:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-left: 40px; +} +.uk-search-navbar:has(.uk-search-icon-flip) .uk-search-input { + padding-right: 40px; +} +/* Medium modifier + ========================================================================== */ +.uk-search-medium { + width: 400px; +} +/* + * Input + */ +.uk-search-medium .uk-search-input { + height: 55px; + padding-left: 12px; + padding-right: 12px; + background: transparent; + font-size: 1.5rem; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-medium .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-medium .uk-search-icon { + padding-left: 12px; + padding-right: 12px; +} +.uk-search-medium:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-left: 48px; +} +.uk-search-medium:has(.uk-search-icon-flip) .uk-search-input { + padding-right: 48px; +} +/* Large modifier + ========================================================================== */ +.uk-search-large { + width: 500px; +} +/* + * Input + */ +.uk-search-large .uk-search-input { + height: 90px; + padding-left: 20px; + padding-right: 20px; + background: transparent; + font-size: 2.625rem; + border: 1px solid #e5e5e5; +} +/* Focus */ +.uk-search-large .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0); + border-color: #1e87f0; +} +/* + * Icon + */ +.uk-search-large .uk-search-icon { + padding-left: 20px; + padding-right: 20px; +} +.uk-search-large:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input { + padding-left: 80px; +} +.uk-search-large:has(.uk-search-icon-flip) .uk-search-input { + padding-right: 80px; +} +/* Toggle + ========================================================================== */ +.uk-search-toggle { + color: #999; +} +/* Hover */ +.uk-search-toggle:hover { + color: #666; +} +/* ======================================================================== + Component: Accordion + ========================================================================== */ +.uk-accordion { + padding: 0; + list-style: none; +} +/* Item + ========================================================================== */ +.uk-accordion > :nth-child(n+2) { + margin-top: 20px; +} +/* Title + ========================================================================== */ +.uk-accordion-title { + display: block; + font-size: 1.25rem; + line-height: 1.4; + color: #333; + overflow: hidden; +} +.uk-accordion-title::before { + content: ""; + width: 1.4em; + height: 1.4em; + margin-left: 10px; + float: right; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E"); + background-repeat: no-repeat; + background-position: 50% 50%; +} +.uk-open > .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* Hover */ +.uk-accordion-title:hover { + color: #666; + text-decoration: none; +} +/* Content + ========================================================================== */ +.uk-accordion-content { + display: flow-root; + margin-top: 20px; +} +/* + * Remove margin from the last-child + */ +.uk-accordion-content > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Drop + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Set a default width + */ +.uk-drop { + /* 1 */ + display: none; + /* 2 */ + position: absolute; + z-index: 1020; + --uk-position-offset: 20px; + --uk-position-viewport-offset: 15px; + /* 3 */ + box-sizing: border-box; + width: 300px; +} +/* Show */ +.uk-drop.uk-open { + display: block; +} +/* Grid modifiers + ========================================================================== */ +.uk-drop-stack .uk-drop-grid > * { + width: 100% !important; +} +/* Parent icon + ========================================================================== */ +.uk-drop-parent-icon { + margin-left: 0.25em; + transition: transform 0.3s ease-out; +} +[aria-expanded="true"] > .uk-drop-parent-icon { + transform: rotateX(180deg); +} +/* ======================================================================== + Component: Dropbar + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Reset drop + * 2. Style + */ +.uk-dropbar { + --uk-position-offset: 0; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 0; + --uk-inverse: dark; + /* 1 */ + width: auto; + /* 2 */ + padding: 25px 15px 25px 15px; + background: #fff; + color: #666; +} +/* + * Remove margin from the last-child + */ +.uk-dropbar > :last-child { + margin-bottom: 0; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-dropbar { + padding-left: 30px; + padding-right: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-dropbar { + padding-left: 40px; + padding-right: 40px; + } +} +.uk-dropbar :focus-visible { + outline-color: #333 !important; +} +/* Size modifier + ========================================================================== */ +.uk-dropbar-large { + padding-top: 40px; + padding-bottom: 40px; +} +/* Direction modifier + ========================================================================== */ +.uk-dropbar-top { + box-shadow: 0 12px 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-bottom { + box-shadow: 0 -12px 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-left { + box-shadow: 12px 0 7px -6px rgba(0, 0, 0, 0.05); +} +.uk-dropbar-right { + box-shadow: -12px 0 7px -6px rgba(0, 0, 0, 0.05); +} +/* ======================================================================== + Component: Dropnav + ========================================================================== */ +/* + * 1. Position + * 2. Reset dropbar + * 3. Width + */ +.uk-dropnav-dropbar { + /* 1 */ + position: absolute; + z-index: 980; + /* 2 */ + padding: 0; + /* 3 */ + left: 0; + right: 0; +} +/* ======================================================================== + Component: Modal + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Allow scrolling for the modal dialog + * 4. Horizontal padding + * 5. Mask the background page + * 6. Fade-in transition + */ +.uk-modal { + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1010; + /* 3 */ + overflow-y: auto; + /* 4 */ + padding: 15px 15px; + /* 5 */ + background: rgba(0, 0, 0, 0.6); + /* 6 */ + opacity: 0; + transition: opacity 0.15s linear; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-modal { + padding: 50px 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-modal { + padding-left: 40px; + padding-right: 40px; + } +} +/* + * Open + */ +.uk-modal.uk-open { + opacity: 1; +} +/* Page + ========================================================================== */ +/* + * Prevent scrollbars + */ +.uk-modal-page { + overflow: hidden; +} +/* Dialog + ========================================================================== */ +/* + * 1. Create position context for spinner and close button + * 2. Dimensions + * 3. `!important` is needed to overwrite `uk-width-auto`. See `#modal-media-image` in tests + * 4. Style + * 5. Slide-in transition + */ +.uk-modal-dialog { + /* 1 */ + position: relative; + /* 2 */ + box-sizing: border-box; + margin: 0 auto; + width: 600px; + /* 3 */ + max-width: 100% !important; + /* 4 */ + background: #fff; + /* 5 */ + opacity: 0; + transform: translateY(-100px); + transition: 0.3s linear; + transition-property: opacity, transform; +} +/* + * Open + */ +.uk-open > .uk-modal-dialog { + opacity: 1; + transform: translateY(0); +} +/* Size modifier + ========================================================================== */ +/* + * Container size + * Take the same size as the Container component + */ +.uk-modal-container .uk-modal-dialog { + width: 1200px; +} +/* + * Full size + * 1. Remove padding and background from modal + * 2. Reset all default declarations from modal dialog + */ +/* 1 */ +.uk-modal-full { + padding: 0; + background: none; +} +/* 2 */ +.uk-modal-full .uk-modal-dialog { + margin: 0; + width: 100%; + max-width: 100%; + transform: translateY(0); +} +/* Sections + ========================================================================== */ +.uk-modal-body { + display: flow-root; + padding: 20px 20px; +} +.uk-modal-header { + display: flow-root; + padding: 10px 20px; + background: #fff; + border-bottom: 1px solid #e5e5e5; +} +.uk-modal-footer { + display: flow-root; + padding: 10px 20px; + background: #fff; + border-top: 1px solid #e5e5e5; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-modal-body { + padding: 30px 30px; + } + .uk-modal-header { + padding: 15px 30px; + } + .uk-modal-footer { + padding: 15px 30px; + } +} +/* + * Remove margin from the last-child + */ +.uk-modal-body > :last-child, +.uk-modal-header > :last-child, +.uk-modal-footer > :last-child { + margin-bottom: 0; +} +/* Title + ========================================================================== */ +.uk-modal-title { + font-size: 2rem; + line-height: 1.3; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +[class*="uk-modal-close-"] { + position: absolute; + z-index: 1010; + top: 10px; + right: 10px; + padding: 5px; +} +/* + * Remove margin from adjacent element + */ +[class*="uk-modal-close-"]:first-child + * { + margin-top: 0; +} +/* + * Hover + */ +/* + * Default + */ +/* + * Outside + * 1. Prevent scrollbar on small devices + */ +.uk-modal-close-outside { + top: 0; + /* 1 */ + right: -5px; + transform: translate(0, -100%); + color: #ffffff; +} +.uk-modal-close-outside:hover { + color: #fff; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + /* 1 */ + .uk-modal-close-outside { + right: 0; + transform: translate(100%, -100%); + } +} +/* + * Full + */ +.uk-modal-close-full { + top: 0; + right: 0; + padding: 10px; + background: #fff; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-modal-close-full { + padding: 20px; + } +} +/* ======================================================================== + Component: Slideshow + ========================================================================== */ +/* + * 1. Prevent tab highlighting on iOS. + */ +.uk-slideshow { + /* 1 */ + -webkit-tap-highlight-color: transparent; +} +/* Items + ========================================================================== */ +/* + * 1. Create position and stacking context + * 2. Reset list + * 3. Clip child elements + * 4. Prevent displaying the callout information on iOS. + * 5. Disable horizontal panning gestures + */ +.uk-slideshow-items { + /* 1 */ + position: relative; + z-index: 0; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + overflow: hidden; + /* 4 */ + -webkit-touch-callout: none; + /* 5 */ + touch-action: pan-y; +} +/* Item + ========================================================================== */ +/* + * 1. Position items above each other + * 2. Take the full width + * 3. Clip child elements, e.g. for `uk-cover` + * 4. Optimize animation + */ +.uk-slideshow-items > * { + /* 1 */ + position: absolute; + top: 0; + left: 0; + /* 2 */ + right: 0; + bottom: 0; + /* 3 */ + overflow: hidden; + /* 4 */ + will-change: transform, opacity; +} +/* + * Hide not active items + */ +.uk-slideshow-items > :not(.uk-active) { + display: none; +} +/* ======================================================================== + Component: Slider + ========================================================================== */ +/* + * 1. Prevent tab highlighting on iOS. + */ +.uk-slider { + /* 1 */ + -webkit-tap-highlight-color: transparent; +} +/* Container + ========================================================================== */ +/* + * 1. Clip child elements + * 2. Prevent accidental scrolling through elements in slide getting focused + */ +.uk-slider-container { + /* 1 */ + overflow: hidden; + /* 2 */ + overflow: clip; +} +/* + * Widen container to prevent box-shadows from clipping, `large-box-shadow` + */ +.uk-slider-container-offset { + margin: -11px -25px -39px -25px; + padding: 11px 25px 39px 25px; +} +/* Items + ========================================================================== */ +/* + * 1. Optimize animation + * 2. Create a containing block. In Safari it's neither created by `transform` nor `will-change`. + * 3. Disable horizontal panning gestures + */ +.uk-slider-items { + /* 1 */ + will-change: transform; + /* 2 */ + position: relative; + /* 3 */ + touch-action: pan-y; +} +/* + * 1. Reset list style without interfering with grid + * 2. Prevent displaying the callout information on iOS. + */ +.uk-slider-items:not(.uk-grid) { + display: flex; + /* 1 */ + margin: 0; + padding: 0; + list-style: none; + /* 2 */ + -webkit-touch-callout: none; +} +.uk-slider-items.uk-grid { + flex-wrap: nowrap; +} +/* Item + ========================================================================== */ +/* + * 1. Let items take content dimensions (0 0 auto) + * `max-width` needed to keep image responsiveness and prevent content overflow + * 2. Create position context + */ +.uk-slider-items > * { + /* 1 */ + flex: none !important; + box-sizing: border-box; + max-width: 100%; + /* 2 */ + position: relative; +} +/* ======================================================================== + Component: Sticky + ========================================================================== */ +/* + * 1. Create position context so it's t the same like when fixed. + * 2. Create stacking context already when not sticky to have the same context +* for position set to `sticky` and `relative` + * 2. More robust if padding and border are used and the sticky height is transitioned + */ +.uk-sticky { + /* 1 */ + position: relative; + /* 2 */ + z-index: 980; + /* 3 */ + box-sizing: border-box; +} +.uk-sticky-fixed { + margin: 0 !important; +} +/* + * Faster animations + */ +.uk-sticky[class*="uk-animation-"] { + animation-duration: 0.2s; +} +.uk-sticky.uk-animation-reverse { + animation-duration: 0.2s; +} +/* + * Placeholder + * Make content clickable for sticky cover and reveal effects + */ +.uk-sticky-placeholder { + pointer-events: none; +} +/* ======================================================================== + Component: Off-canvas + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + */ +.uk-offcanvas { + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + bottom: 0; + left: 0; + z-index: 1000; +} +/* + * Flip modifier + */ +.uk-offcanvas-flip .uk-offcanvas { + right: 0; + left: auto; +} +/* Bar + ========================================================================== */ +/* + * 1. Set position + * 2. Size and style + * 3. Allow scrolling + */ +.uk-offcanvas-bar { + --uk-inverse: light; + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + left: -270px; + /* 2 */ + box-sizing: border-box; + width: 270px; + padding: 20px 20px; + background: #222; + /* 3 */ + overflow-y: auto; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-bar { + left: -350px; + width: 350px; + padding: 30px 30px; + } +} +/* Flip modifier */ +.uk-offcanvas-flip .uk-offcanvas-bar { + left: auto; + right: -270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-flip .uk-offcanvas-bar { + right: -350px; + } +} +/* + * Open + */ +.uk-open > .uk-offcanvas-bar { + left: 0; +} +.uk-offcanvas-flip .uk-open > .uk-offcanvas-bar { + left: auto; + right: 0; +} +/* + * Slide Animation (Used in slide and push mode) + */ +.uk-offcanvas-bar-animation { + transition: left 0.3s ease-out; +} +.uk-offcanvas-flip .uk-offcanvas-bar-animation { + transition-property: right; +} +/* + * Reveal Animation + * 1. Set position + * 2. Clip the bar + * 3. Animation + * 4. Reset position + */ +.uk-offcanvas-reveal { + /* 1 */ + position: absolute; + top: 0; + bottom: 0; + left: 0; + /* 2 */ + width: 0; + overflow: hidden; + /* 3 */ + transition: width 0.3s ease-out; +} +.uk-offcanvas-reveal .uk-offcanvas-bar { + /* 4 */ + left: 0; +} +.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar { + /* 4 */ + left: auto; + right: 0; +} +.uk-open > .uk-offcanvas-reveal { + width: 270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-open > .uk-offcanvas-reveal { + width: 350px; + } +} +/* + * Flip modifier + */ +.uk-offcanvas-flip .uk-offcanvas-reveal { + right: 0; + left: auto; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-offcanvas-close { + position: absolute; + z-index: 1000; + top: 5px; + right: 5px; + padding: 5px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + .uk-offcanvas-close { + top: 10px; + right: 10px; + } +} +/* + * Remove margin from adjacent element + */ +.uk-offcanvas-close:first-child + * { + margin-top: 0; +} +/* Overlay + ========================================================================== */ +/* + * Overlay the whole page. Needed for the `::before` + * 1. Using `100vw` so no modification is needed when off-canvas is flipped + * 2. Allow for closing with swipe gesture on devices with pointer events. + */ +.uk-offcanvas-overlay { + /* 1 */ + width: 100vw; + /* 2 */ + touch-action: none; +} +/* + * 1. Mask the whole page + * 2. Fade-in transition + */ +.uk-offcanvas-overlay::before { + /* 1 */ + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.1); + /* 2 */ + opacity: 0; + transition: opacity 0.15s linear; +} +.uk-offcanvas-overlay.uk-open::before { + opacity: 1; +} +/* Prevent scrolling + ========================================================================== */ +/* + * Prevent horizontal scrollbar when the content is slide-out + * Has to be on the `html` element too to make it work on the `body` + * 1. `clip` is needed for `position: sticky` elements to keep their position + */ +.uk-offcanvas-page, +.uk-offcanvas-container { + overflow-x: hidden; + /* 1 */ + overflow-x: clip; +} +/* Container + ========================================================================== */ +/* + * Prepare slide-out animation (Used in reveal and push mode) + * Using `position: left` instead of `transform` because position `fixed` elements like sticky navbars + * lose their fixed state and behaves like `absolute` within a transformed container + * 1. Provide a fixed width and prevent shrinking + */ +.uk-offcanvas-container { + position: relative; + left: 0; + transition: left 0.3s ease-out; + /* 1 */ + box-sizing: border-box; + width: 100%; +} +/* + * Activate slide-out animation + */ +:not(.uk-offcanvas-flip).uk-offcanvas-container-animation { + left: 270px; +} +.uk-offcanvas-flip.uk-offcanvas-container-animation { + left: -270px; +} +/* Tablet landscape and bigger */ +@media (min-width: 640px) { + :not(.uk-offcanvas-flip).uk-offcanvas-container-animation { + left: 350px; + } + .uk-offcanvas-flip.uk-offcanvas-container-animation { + left: -350px; + } +} +/* ======================================================================== + Component: Switcher + ========================================================================== */ +/* + * Reset list + */ +.uk-switcher { + margin: 0; + padding: 0; + list-style: none; +} +/* Items + ========================================================================== */ +/* + * Hide not active items + */ +.uk-switcher > :not(.uk-active) { + display: none; +} +/* + * Remove margin from the last-child + */ +.uk-switcher > * > :last-child { + margin-bottom: 0; +} +/* ======================================================================== + Component: Leader + ========================================================================== */ +.uk-leader { + overflow: hidden; +} +/* + * 1. Place element in text flow + * 2. Never break into a new line + * 3. Get a string back with as many repeating characters to fill the container + * 4. Prevent wrapping. Overflowing characters will be clipped by the container + */ +.uk-leader-fill::after { + /* 1 */ + display: inline-block; + margin-left: 15px; + /* 2 */ + width: 0; + /* 3 */ + content: attr(data-fill); + /* 4 */ + white-space: nowrap; +} +/* + * Hide if media does not match + */ +.uk-leader-fill.uk-leader-hide::after { + display: none; +} +/* + * Pass fill character to JS + */ +:root { + --uk-leader-fill-content: .; +} +/* ======================================================================== + Component: Notification + ========================================================================== */ +/* + * 1. Set position + * 2. Dimensions + */ +.uk-notification { + /* 1 */ + position: fixed; + top: 10px; + left: 10px; + z-index: 1040; + /* 2 */ + box-sizing: border-box; + width: 350px; +} +/* Position modifiers +========================================================================== */ +.uk-notification-top-right, +.uk-notification-bottom-right { + left: auto; + right: 10px; +} +.uk-notification-top-center, +.uk-notification-bottom-center { + left: 50%; + margin-left: -175px; +} +.uk-notification-bottom-left, +.uk-notification-bottom-right, +.uk-notification-bottom-center { + top: auto; + bottom: 10px; +} +/* Responsiveness +========================================================================== */ +/* Phones portrait and smaller */ +@media (max-width: 639px) { + .uk-notification { + left: 10px; + right: 10px; + width: auto; + margin: 0; + } +} +/* Message +========================================================================== */ +.uk-notification-message { + position: relative; + padding: 15px; + background: #f8f8f8; + color: #666; + font-size: 1.25rem; + line-height: 1.4; + cursor: pointer; +} +* + .uk-notification-message { + margin-top: 10px; +} +/* Close + * Adopts `uk-close` + ========================================================================== */ +.uk-notification-close { + display: none; + position: absolute; + top: 20px; + right: 15px; +} +.uk-notification-message:hover .uk-notification-close { + display: block; +} +/* Style modifiers + ========================================================================== */ +/* + * Primary + */ +.uk-notification-message-primary { + color: #1e87f0; +} +/* + * Success + */ +.uk-notification-message-success { + color: #32d296; +} +/* + * Warning + */ +.uk-notification-message-warning { + color: #faa05a; +} +/* + * Danger + */ +.uk-notification-message-danger { + color: #f0506e; +} +/* ======================================================================== + Component: Tooltip + ========================================================================== */ +/* + * 1. Hide by default + * 2. Position + * 3. Remove tooltip from document flow to keep the UIkit container from changing its size when injected into the document initially + * 4. Dimensions + * 5. Style + */ +.uk-tooltip { + /* 1 */ + display: none; + /* 2 */ + position: absolute; + z-index: 1030; + --uk-position-offset: 10px; + --uk-position-viewport-offset: 10; + /* 3 */ + top: 0; + /* 4 */ + box-sizing: border-box; + max-width: 200px; + padding: 3px 6px; + /* 5 */ + background: #666; + border-radius: 2px; + color: #fff; + font-size: 12px; +} +/* Show */ +.uk-tooltip.uk-active { + display: block; +} +/* ======================================================================== + Component: Sortable + ========================================================================== */ +.uk-sortable { + position: relative; +} +/* + * Remove margin from the last-child + */ +.uk-sortable > :last-child { + margin-bottom: 0; +} +/* Drag + ========================================================================== */ +.uk-sortable-drag { + position: fixed !important; + z-index: 1050 !important; + pointer-events: none; +} +/* Placeholder + ========================================================================== */ +.uk-sortable-placeholder { + opacity: 0; + pointer-events: none; +} +/* Empty modifier + ========================================================================== */ +.uk-sortable-empty { + min-height: 50px; +} +/* Handle + ========================================================================== */ +/* Hover */ +.uk-sortable-handle:hover { + cursor: move; +} +/* ======================================================================== + Component: Countdown + ========================================================================== */ +/* Item + ========================================================================== */ +/* Number + ========================================================================== */ +/* + * 1. Make numbers all of the same size to prevent jumping. Must be supported by the font. + * 2. Style + */ +.uk-countdown-number { + /* 1 */ + font-variant-numeric: tabular-nums; + /* 2 */ + font-size: 2rem; + line-height: 0.8; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-countdown-number { + font-size: 4rem; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-countdown-number { + font-size: 6rem; + } +} +/* Separator + ========================================================================== */ +.uk-countdown-separator { + font-size: 1rem; + line-height: 1.6; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-countdown-separator { + font-size: 2rem; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-countdown-separator { + font-size: 3rem; + } +} +/* Label + ========================================================================== */ +/* ======================================================================== + Component: Thumbnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-thumbnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-left: -15px; +} +/* + * Space is allocated based on content dimensions, but shrinks: 0 1 auto + * 1. Gutter + */ +.uk-thumbnav > * { + /* 1 */ + padding-left: 15px; +} +/* Items + ========================================================================== */ +/* + * Items + */ +.uk-thumbnav > * > * { + display: inline-block; + position: relative; +} +.uk-thumbnav > * > *::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-image: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4)); + transition: opacity 0.1s ease-in-out; +} +/* Hover */ +.uk-thumbnav > * > :hover::after { + opacity: 0; +} +/* Active */ +.uk-thumbnav > .uk-active > *::after { + opacity: 0; +} +/* Modifier: 'uk-thumbnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-thumbnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-left: 0; + margin-top: -15px; +} +/* 2 */ +.uk-thumbnav-vertical > * { + padding-left: 0; + padding-top: 15px; +} +/* ======================================================================== + Component: Iconnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-iconnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-left: -10px; +} +/* + * Space is allocated based on content dimensions, but shrinks: 0 1 auto + * 1. Gutter + */ +.uk-iconnav > * { + /* 1 */ + padding-left: 10px; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * 1. Center content vertically if there is still some text + * 2. Imitate white space gap when using flexbox + * 3. Force text not to affect item height + * 4. Style + * 5. Required for `a` if there is still some text + */ +.uk-iconnav > * > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + line-height: 0; + /* 4 */ + color: #999; + /* 5 */ + text-decoration: none; + font-size: 0.875rem; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-iconnav > * > a:hover { + color: #666; +} +/* Active */ +.uk-iconnav > .uk-active > a { + color: #666; +} +/* Modifier: 'uk-iconnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-iconnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-left: 0; + margin-top: -10px; +} +/* 2 */ +.uk-iconnav-vertical > * { + padding-left: 0; + padding-top: 10px; +} +/* ======================================================================== + Component: Grid + ========================================================================== */ +/* + * 1. Allow cells to wrap into the next line + * 2. Reset list + */ +.uk-grid { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; +} +/* + * Grid cell + * Note: Space is allocated solely based on content dimensions, but shrinks: 0 1 auto + * Reset margin for e.g. paragraphs + */ +.uk-grid > * { + margin: 0; +} +/* + * Remove margin from the last-child + */ +.uk-grid > * > :last-child { + margin-bottom: 0; +} +/* Gutter + ========================================================================== */ +/* + * Default + */ +/* Horizontal */ +.uk-grid { + margin-left: -30px; +} +.uk-grid > * { + padding-left: 30px; +} +/* Vertical */ +.uk-grid + .uk-grid, +.uk-grid > .uk-grid-margin, +* + .uk-grid-margin { + margin-top: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid { + margin-left: -40px; + } + .uk-grid > * { + padding-left: 40px; + } + /* Vertical */ + .uk-grid + .uk-grid, + .uk-grid > .uk-grid-margin, + * + .uk-grid-margin { + margin-top: 40px; + } +} +/* + * Small + */ +/* Horizontal */ +.uk-grid-small, +.uk-grid-column-small { + margin-left: -15px; +} +.uk-grid-small > *, +.uk-grid-column-small > * { + padding-left: 15px; +} +/* Vertical */ +.uk-grid + .uk-grid-small, +.uk-grid + .uk-grid-row-small, +.uk-grid-small > .uk-grid-margin, +.uk-grid-row-small > .uk-grid-margin, +* + .uk-grid-margin-small { + margin-top: 15px; +} +/* + * Medium + */ +/* Horizontal */ +.uk-grid-medium, +.uk-grid-column-medium { + margin-left: -30px; +} +.uk-grid-medium > *, +.uk-grid-column-medium > * { + padding-left: 30px; +} +/* Vertical */ +.uk-grid + .uk-grid-medium, +.uk-grid + .uk-grid-row-medium, +.uk-grid-medium > .uk-grid-margin, +.uk-grid-row-medium > .uk-grid-margin, +* + .uk-grid-margin-medium { + margin-top: 30px; +} +/* + * Large + */ +/* Horizontal */ +.uk-grid-large, +.uk-grid-column-large { + margin-left: -40px; +} +.uk-grid-large > *, +.uk-grid-column-large > * { + padding-left: 40px; +} +/* Vertical */ +.uk-grid + .uk-grid-large, +.uk-grid + .uk-grid-row-large, +.uk-grid-large > .uk-grid-margin, +.uk-grid-row-large > .uk-grid-margin, +* + .uk-grid-margin-large { + margin-top: 40px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-large, + .uk-grid-column-large { + margin-left: -70px; + } + .uk-grid-large > *, + .uk-grid-column-large > * { + padding-left: 70px; + } + /* Vertical */ + .uk-grid + .uk-grid-large, + .uk-grid + .uk-grid-row-large, + .uk-grid-large > .uk-grid-margin, + .uk-grid-row-large > .uk-grid-margin, + * + .uk-grid-margin-large { + margin-top: 70px; + } +} +/* + * Collapse + */ +/* Horizontal */ +.uk-grid-collapse, +.uk-grid-column-collapse { + margin-left: 0; +} +.uk-grid-collapse > *, +.uk-grid-column-collapse > * { + padding-left: 0; +} +/* Vertical */ +.uk-grid + .uk-grid-collapse, +.uk-grid + .uk-grid-row-collapse, +.uk-grid-collapse > .uk-grid-margin, +.uk-grid-row-collapse > .uk-grid-margin { + margin-top: 0; +} +/* Divider + ========================================================================== */ +.uk-grid-divider > * { + position: relative; +} +.uk-grid-divider > :not(.uk-first-column)::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + border-left: 1px solid #e5e5e5; +} +/* Vertical */ +.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + content: ""; + position: absolute; + left: 0; + right: 0; + border-top: 1px solid #e5e5e5; +} +/* + * Default + */ +/* Horizontal */ +.uk-grid-divider { + margin-left: -60px; +} +.uk-grid-divider > * { + padding-left: 60px; +} +.uk-grid-divider > :not(.uk-first-column)::before { + left: 30px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-stack > .uk-grid-margin { + margin-top: 60px; +} +.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + top: -30px; + left: 60px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-divider { + margin-left: -80px; + } + .uk-grid-divider > * { + padding-left: 80px; + } + .uk-grid-divider > :not(.uk-first-column)::before { + left: 40px; + } + /* Vertical */ + .uk-grid-divider.uk-grid-stack > .uk-grid-margin { + margin-top: 80px; + } + .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + top: -40px; + left: 80px; + } +} +/* + * Small + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-small, +.uk-grid-divider.uk-grid-column-small { + margin-left: -30px; +} +.uk-grid-divider.uk-grid-small > *, +.uk-grid-divider.uk-grid-column-small > * { + padding-left: 30px; +} +.uk-grid-divider.uk-grid-small > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-small > :not(.uk-first-column)::before { + left: 15px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin { + margin-top: 30px; +} +.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before { + top: -15px; + left: 30px; +} +.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin::before { + top: -15px; +} +.uk-grid-divider.uk-grid-column-small.uk-grid-stack > .uk-grid-margin::before { + left: 30px; +} +/* + * Medium + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-medium, +.uk-grid-divider.uk-grid-column-medium { + margin-left: -60px; +} +.uk-grid-divider.uk-grid-medium > *, +.uk-grid-divider.uk-grid-column-medium > * { + padding-left: 60px; +} +.uk-grid-divider.uk-grid-medium > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-medium > :not(.uk-first-column)::before { + left: 30px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin { + margin-top: 60px; +} +.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before { + top: -30px; + left: 60px; +} +.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin::before { + top: -30px; +} +.uk-grid-divider.uk-grid-column-medium.uk-grid-stack > .uk-grid-margin::before { + left: 60px; +} +/* + * Large + */ +/* Horizontal */ +.uk-grid-divider.uk-grid-large, +.uk-grid-divider.uk-grid-column-large { + margin-left: -80px; +} +.uk-grid-divider.uk-grid-large > *, +.uk-grid-divider.uk-grid-column-large > * { + padding-left: 80px; +} +.uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before, +.uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { + left: 40px; +} +/* Vertical */ +.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin, +.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { + margin-top: 80px; +} +.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before { + top: -40px; + left: 80px; +} +.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { + top: -40px; +} +.uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { + left: 80px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Horizontal */ + .uk-grid-divider.uk-grid-large, + .uk-grid-divider.uk-grid-column-large { + margin-left: -140px; + } + .uk-grid-divider.uk-grid-large > *, + .uk-grid-divider.uk-grid-column-large > * { + padding-left: 140px; + } + .uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before, + .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { + left: 70px; + } + /* Vertical */ + .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin, + .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { + margin-top: 140px; + } + .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before { + top: -70px; + left: 140px; + } + .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { + top: -70px; + } + .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { + left: 140px; + } +} +/* Match child of a grid cell + ========================================================================== */ +/* + * Behave like a block element + * 1. Wrap into the next line + * 2. Take the full width, at least 100%. Only if no class from the Width component is set. + * 3. Expand width even if larger than 100%, e.g. because of negative margin (Needed for nested grids) + */ +.uk-grid-match > *, +.uk-grid-item-match { + display: flex; + /* 1 */ + flex-wrap: wrap; +} +.uk-grid-match > * > :not([class*="uk-width"]), +.uk-grid-item-match > :not([class*="uk-width"]) { + /* 2 */ + box-sizing: border-box; + width: 100%; + /* 3 */ + flex: auto; +} +/* ======================================================================== + Component: Nav + ========================================================================== */ +/* + * Reset + */ +.uk-nav, +.uk-nav ul { + margin: 0; + padding: 0; + list-style: none; +} +/* +* 1. Center content vertically, e.g. an icon +* 2. Imitate white space gap when using flexbox +* 3. Reset link + */ +.uk-nav li > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3*/ + text-decoration: none; +} +/* + * Items + * Must target `a` elements to exclude other elements (e.g. lists) + */ +.uk-nav > li > a { + padding: 5px 0; +} +/* Sublists + ========================================================================== */ +/* + * Level 2 + * `ul` needed for higher specificity to override padding + */ +ul.uk-nav-sub { + padding: 5px 0 5px 15px; +} +/* + * Level 3 and deeper + */ +.uk-nav-sub ul { + padding-left: 15px; +} +/* + * Items + */ +.uk-nav-sub a { + padding: 2px 0; +} +/* Parent icon + ========================================================================== */ +.uk-nav-parent-icon { + margin-left: auto; + transition: transform 0.3s ease-out; +} +.uk-nav > li.uk-open > a .uk-nav-parent-icon { + transform: rotateX(180deg); +} +/* Header + ========================================================================== */ +.uk-nav-header { + padding: 5px 0; + text-transform: uppercase; + font-size: 0.875rem; +} +.uk-nav-header:not(:first-child) { + margin-top: 20px; +} +/* Divider + ========================================================================== */ +.uk-nav .uk-nav-divider { + margin: 5px 0; +} +/* Default modifier + ========================================================================== */ +.uk-nav-default { + font-size: 0.875rem; + line-height: 1.5; +} +/* + * Items + */ +.uk-nav-default > li > a { + color: #999; +} +/* Hover */ +.uk-nav-default > li > a:hover { + color: #666; +} +/* Active */ +.uk-nav-default > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-nav-default .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-nav-default .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-default .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-default .uk-nav-sub { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-nav-default .uk-nav-sub a { + color: #999; +} +.uk-nav-default .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-default .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Primary modifier + ========================================================================== */ +.uk-nav-primary { + font-size: 1.5rem; + line-height: 1.5; +} +/* + * Items + */ +.uk-nav-primary > li > a { + color: #999; +} +/* Hover */ +.uk-nav-primary > li > a:hover { + color: #666; +} +/* Active */ +.uk-nav-primary > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-nav-primary .uk-nav-subtitle { + font-size: 1.25rem; +} +/* + * Header + */ +.uk-nav-primary .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-primary .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-primary .uk-nav-sub { + font-size: 1.25rem; + line-height: 1.5; +} +.uk-nav-primary .uk-nav-sub a { + color: #999; +} +.uk-nav-primary .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-primary .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Secondary modifier + ========================================================================== */ +.uk-nav-secondary { + font-size: 16px; + line-height: 1.5; +} +.uk-nav-secondary > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + margin-top: 0; +} +/* + * Items + */ +.uk-nav-secondary > li > a { + color: #333; + padding: 10px 10px; +} +/* Hover */ +.uk-nav-secondary > li > a:hover { + color: #333; + background-color: #f8f8f8; +} +/* Active */ +.uk-nav-secondary > li.uk-active > a { + color: #333; + background-color: #f8f8f8; +} +/* + * Subtitle + */ +.uk-nav-secondary .uk-nav-subtitle { + font-size: 0.875rem; + color: #999; +} +/* Hover */ +.uk-nav-secondary > li > a:hover .uk-nav-subtitle { + color: #666; +} +/* Active */ +.uk-nav-secondary > li.uk-active > a .uk-nav-subtitle { + color: #333; +} +/* + * Header + */ +.uk-nav-secondary .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-nav-secondary .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-nav-secondary .uk-nav-sub { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-nav-secondary .uk-nav-sub a { + color: #999; +} +.uk-nav-secondary .uk-nav-sub a:hover { + color: #666; +} +.uk-nav-secondary .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Size modifier + ========================================================================== */ +/* + * Medium + */ +.uk-nav-medium { + font-size: 2.8875rem; + line-height: 1; +} +.uk-nav-large { + font-size: 3.4rem; + line-height: 1; +} +.uk-nav-xlarge { + font-size: 4rem; + line-height: 1; +} +/* Tablet Landscape and bigger */ +@media (min-width: 960px) { + .uk-nav-medium { + font-size: 3.5rem; + } + .uk-nav-large { + font-size: 4rem; + } + .uk-nav-xlarge { + font-size: 6rem; + } +} +/* Laptop and bigger */ +@media (min-width: 1200px) { + .uk-nav-medium { + font-size: 4rem; + } + .uk-nav-large { + font-size: 6rem; + } + .uk-nav-xlarge { + font-size: 8rem; + } +} +/* Alignment modifier + ========================================================================== */ +/* + * 1. Center header + * 2. Center items + */ +/* 1 */ +.uk-nav-center { + text-align: center; +} +/* 2 */ +.uk-nav-center li > a { + justify-content: center; +} +/* Sublists */ +.uk-nav-center .uk-nav-sub, +.uk-nav-center .uk-nav-sub ul { + padding-left: 0; +} +/* Parent icon */ +.uk-nav-center .uk-nav-parent-icon { + margin-left: 0.25em; +} +/* Style modifier + ========================================================================== */ +/* + * Divider + * Naming is in plural to prevent conflicts with divider sub object. + */ +.uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + margin-top: 5px; + padding-top: 5px; + border-top: 1px solid #e5e5e5; +} +/* ======================================================================== + Component: Navbar + ========================================================================== */ +/* + * 1. Create position context to center navbar group + */ +.uk-navbar { + display: flex; + /* 1 */ + position: relative; +} +/* Container + ========================================================================== */ +.uk-navbar-container:not(.uk-navbar-transparent) { + background: #f8f8f8; +} +/* Groups + ========================================================================== */ +/* + * 1. Align navs and items vertically if they have a different height + */ +.uk-navbar-left, +.uk-navbar-right, +[class*="uk-navbar-center"] { + display: flex; + gap: 15px; + /* 1 */ + align-items: center; +} +/* + * Horizontal alignment + * 1. Create position context for centered navbar with sub groups (left/right) + * 2. Fix text wrapping if content is larger than 50% of the container. + * 3. Needed for dropdowns because a new position context is created + * `z-index` must be smaller than off-canvas + * 4. Align sub groups for centered navbar + */ +.uk-navbar-right { + margin-left: auto; +} +.uk-navbar-center:only-child { + margin-left: auto; + margin-right: auto; + /* 1 */ + position: relative; +} +.uk-navbar-center:not(:only-child) { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + /* 2 */ + width: max-content; + box-sizing: border-box; + /* 3 */ + z-index: 990; +} +/* 4 */ +.uk-navbar-center-left, +.uk-navbar-center-right { + position: absolute; + top: 0; +} +.uk-navbar-center-left { + right: calc(100% + 15px); +} +.uk-navbar-center-right { + left: calc(100% + 15px); +} +[class*="uk-navbar-center-"] { + width: max-content; + box-sizing: border-box; +} +/* Nav + ========================================================================== */ +/* + * 1. Reset list + */ +.uk-navbar-nav { + display: flex; + gap: 15px; + /* 1 */ + margin: 0; + padding: 0; + list-style: none; +} +/* + * Allow items to wrap into the next line + * Only not `absolute` positioned groups + */ +.uk-navbar-left, +.uk-navbar-right, +.uk-navbar-center:only-child { + flex-wrap: wrap; +} +/* + * Items + * 1. Center content vertically and horizontally + * 2. Imitate white space gap when using flexbox + * 3. Dimensions + * 4. Style + * 5. Required for `a` + */ +.uk-navbar-nav > li > a, +.uk-navbar-item, +.uk-navbar-toggle { + /* 1 */ + display: flex; + justify-content: center; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + box-sizing: border-box; + min-height: 80px; + /* 4 */ + font-size: 0.875rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 5 */ + text-decoration: none; +} +/* + * Nav items + */ +.uk-navbar-nav > li > a { + padding: 0 0; + color: #999; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* + * Hover + * Apply hover style also if dropdown is opened + */ +.uk-navbar-nav > li:hover > a, +.uk-navbar-nav > li > a[aria-expanded="true"] { + color: #666; +} +/* OnClick */ +.uk-navbar-nav > li > a:active { + color: #333; +} +/* Active */ +.uk-navbar-nav > li.uk-active > a { + color: #333; +} +/* Parent icon modifier + ========================================================================== */ +.uk-navbar-parent-icon { + margin-left: 4px; + transition: transform 0.3s ease-out; +} +.uk-navbar-nav > li > a[aria-expanded="true"] .uk-navbar-parent-icon { + transform: rotateX(180deg); +} +/* Item + ========================================================================== */ +.uk-navbar-item { + padding: 0 0; + color: #666; +} +/* + * Remove margin from the last-child + */ +.uk-navbar-item > :last-child { + margin-bottom: 0; +} +/* Toggle + ========================================================================== */ +.uk-navbar-toggle { + padding: 0 0; + color: #999; +} +.uk-navbar-toggle:hover, +.uk-navbar-toggle[aria-expanded="true"] { + color: #666; + text-decoration: none; +} +/* + * Icon + * Adopts `uk-icon` + */ +/* Hover */ +/* Subtitle + ========================================================================== */ +.uk-navbar-subtitle { + font-size: 0.875rem; +} +/* Justify modifier + ========================================================================== */ +.uk-navbar-justify .uk-navbar-left, +.uk-navbar-justify .uk-navbar-right, +.uk-navbar-justify .uk-navbar-nav, +.uk-navbar-justify .uk-navbar-nav > li, +.uk-navbar-justify .uk-navbar-item, +.uk-navbar-justify .uk-navbar-toggle { + flex-grow: 1; +} +/* Style modifiers + ========================================================================== */ +/* Dropdown + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Set a default width + * 2. Style + */ +.uk-navbar-dropdown { + --uk-position-offset: 15px; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 15px; + --uk-inverse: dark; + /* 1 */ + width: 200px; + /* 2 */ + padding: 25px; + background: #fff; + color: #666; + box-shadow: 0 5px 12px rgba(0, 0, 0, 0.15); +} +/* + * Remove margin from the last-child + */ +.uk-navbar-dropdown > :last-child { + margin-bottom: 0; +} +.uk-navbar-dropdown :focus-visible { + outline-color: #333 !important; +} +/* + * Grid + * Adopts `uk-grid` + */ +/* Gutter Horizontal */ +.uk-navbar-dropdown .uk-drop-grid { + margin-left: -30px; +} +.uk-navbar-dropdown .uk-drop-grid > * { + padding-left: 30px; +} +/* Gutter Vertical */ +.uk-navbar-dropdown .uk-drop-grid > .uk-grid-margin { + margin-top: 30px; +} +/* + * Width modifier + */ +.uk-navbar-dropdown-width-2:not(.uk-drop-stack) { + width: 400px; +} +.uk-navbar-dropdown-width-3:not(.uk-drop-stack) { + width: 600px; +} +.uk-navbar-dropdown-width-4:not(.uk-drop-stack) { + width: 800px; +} +.uk-navbar-dropdown-width-5:not(.uk-drop-stack) { + width: 1000px; +} +/* + * Size modifier + */ +.uk-navbar-dropdown-large { + --uk-position-shift-offset: 0; + padding: 40px; +} +/* + * Dropbar modifier + * 1. Reset dropdown width to prevent to early shifting + * 2. Reset style + * 3. Padding + */ +.uk-navbar-dropdown-dropbar { + /* 1 */ + width: auto; + /* 2 */ + background: transparent; + /* 3 */ + padding: 25px 0 25px 0; + --uk-position-offset: 0; + --uk-position-shift-offset: 0; + --uk-position-viewport-offset: 15px; + box-shadow: none; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-navbar-dropdown-dropbar { + --uk-position-viewport-offset: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-dropdown-dropbar { + --uk-position-viewport-offset: 40px; + } +} +.uk-navbar-dropdown-dropbar-large { + --uk-position-shift-offset: 0; + padding-top: 40px; + padding-bottom: 40px; +} +/* Dropdown Nav + * Adopts `uk-nav` + ========================================================================== */ +.uk-navbar-dropdown-nav { + font-size: 0.875rem; +} +/* + * Items + */ +.uk-navbar-dropdown-nav > li > a { + color: #999; +} +/* Hover */ +.uk-navbar-dropdown-nav > li > a:hover { + color: #666; +} +/* Active */ +.uk-navbar-dropdown-nav > li.uk-active > a { + color: #333; +} +/* + * Subtitle + */ +.uk-navbar-dropdown-nav .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-navbar-dropdown-nav .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-navbar-dropdown-nav .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-navbar-dropdown-nav .uk-nav-sub a { + color: #999; +} +.uk-navbar-dropdown-nav .uk-nav-sub a:hover { + color: #666; +} +.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active > a { + color: #333; +} +/* Dropbar + ========================================================================== */ +/* + * Adopts `uk-dropnav-dropbar` + */ +.uk-navbar-container { + transition: 0.1s ease-in-out; + transition-property: background-color; +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-left, + .uk-navbar-right, + [class*="uk-navbar-center"] { + gap: 30px; + } + .uk-navbar-center-left { + right: calc(100% + 30px); + } + .uk-navbar-center-right { + left: calc(100% + 30px); + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-navbar-nav { + gap: 30px; + } +} +/* ======================================================================== + Component: Subnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Center items vertically if they have a different height + * 3. Gutter + * 4. Reset list + */ +.uk-subnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + align-items: center; + /* 3 */ + margin-left: -20px; + /* 4 */ + padding: 0; + list-style: none; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-subnav > * { + /* 1 */ + flex: none; + /* 2 */ + padding-left: 20px; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * Using `:first-child` instead of `a` to support `span` elements for text + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Style + */ +.uk-subnav > * > :first-child { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + color: #999; + font-size: 0.875rem; + text-transform: uppercase; + transition: 0.1s ease-in-out; + transition-property: color, background-color; +} +/* Hover */ +.uk-subnav > * > a:hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-subnav > .uk-active > a { + color: #333; +} +/* Divider modifier + ========================================================================== */ +/* + * Set gutter + */ +.uk-subnav-divider { + margin-left: -41px; +} +/* + * Align items and divider vertically + */ +.uk-subnav-divider > * { + display: flex; + align-items: center; +} +/* + * Divider + * 1. `nth-child` makes it also work without JS if it's only one row + */ +.uk-subnav-divider > ::before { + content: ""; + height: 1.5em; + margin-left: 0px; + margin-right: 20px; + border-left: 1px solid transparent; +} +/* 1 */ +.uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before { + border-left-color: #e5e5e5; +} +/* Pill modifier + ========================================================================== */ +/* + * Gutter + */ +.uk-subnav-pill { + margin-left: -20px; +} +.uk-subnav-pill > * { + padding-left: 20px; +} +.uk-subnav-pill > * > :first-child { + padding: 5px 10px; + background: transparent; + color: #999; +} +/* Hover */ +.uk-subnav-pill > * > a:hover { + background-color: #f8f8f8; + color: #666; +} +/* OnClick */ +.uk-subnav-pill > * > a:active { + background-color: #f8f8f8; + color: #666; +} +/* Active */ +.uk-subnav-pill > .uk-active > a { + background-color: #1e87f0; + color: #fff; +} +/* Disabled + * The same for all style modifiers + ========================================================================== */ +.uk-subnav > .uk-disabled > a { + color: #999; +} +/* ======================================================================== + Component: Breadcrumb + ========================================================================== */ +/* + * 1. Reset list + * 2. Remove space between elements + */ +.uk-breadcrumb { + /* 1 */ + padding: 0; + list-style: none; + /* 2 */ + font-size: 0; +} +/* + * 1. Doesn't generate any box and replaced by child boxes + */ +.uk-breadcrumb > * { + display: contents; +} +/* Items + ========================================================================== */ +.uk-breadcrumb > * > * { + font-size: 0.875rem; + color: #999; +} +/* Hover */ +.uk-breadcrumb > * > :hover { + color: #666; + text-decoration: none; +} +/* Disabled */ +/* Active */ +.uk-breadcrumb > :last-child > span, +.uk-breadcrumb > :last-child > a:not([href]) { + color: #666; +} +/* + * Divider + * `nth-child` makes it also work without JS if it's only one row + * 1. Remove space between inline block elements. + * 2. Style + */ +.uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before { + content: "/"; + display: inline-block; + /* 1 */ + margin: 0 20px; + /* 2 */ + font-size: 0.875rem; + color: #999; +} +/* ======================================================================== + Component: Pagination + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Center items vertically if they have a different height + * 3. Gutter + * 4. Reset list + */ +.uk-pagination { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + align-items: center; + /* 3 */ + margin-left: 0; + /* 4 */ + padding: 0; + list-style: none; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-pagination > * { + /* 1 */ + flex: none; + /* 2 */ + padding-left: 0; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Style + */ +.uk-pagination > * > * { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + padding: 5px 10px; + color: #999; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-pagination > * > :hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-pagination > .uk-active > * { + color: #666; +} +/* Disabled */ +.uk-pagination > .uk-disabled > * { + color: #999; +} +/* ======================================================================== + Component: Tab + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Gutter + * 3. Reset list + */ +.uk-tab { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin-left: -20px; + /* 3 */ + padding: 0; + list-style: none; + position: relative; +} +.uk-tab::before { + content: ""; + position: absolute; + bottom: 0; + left: 20px; + right: 0; + border-bottom: 1px solid #e5e5e5; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + * 3. Create position context for dropdowns + */ +.uk-tab > * { + /* 1 */ + flex: none; + /* 2 */ + padding-left: 20px; + /* 3 */ + position: relative; +} +/* Items + ========================================================================== */ +/* + * Items must target `a` elements to exclude other elements (e.g. dropdowns) + * 1. Center content vertically, e.g. an icon + * 2. Imitate white space gap when using flexbox + * 3. Center content if a width is set + * 4. Style + */ +.uk-tab > * > a { + /* 1 */ + display: flex; + align-items: center; + /* 2 */ + column-gap: 0.25em; + /* 3 */ + justify-content: center; + /* 4 */ + padding: 5px 10px; + color: #999; + border-bottom: 1px solid transparent; + font-size: 0.875rem; + text-transform: uppercase; + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-tab > * > a:hover { + color: #666; + text-decoration: none; +} +/* Active */ +.uk-tab > .uk-active > a { + color: #333; + border-color: #1e87f0; +} +/* Disabled */ +.uk-tab > .uk-disabled > a { + color: #999; +} +/* Position modifier + ========================================================================== */ +/* + * Bottom + */ +.uk-tab-bottom::before { + top: 0; + bottom: auto; +} +.uk-tab-bottom > * > a { + border-top: 1px solid transparent; + border-bottom: none; +} +/* + * Left + Right + * 1. Reset Gutter + */ +.uk-tab-left, +.uk-tab-right { + flex-direction: column; + /* 1 */ + margin-left: 0; +} +/* 1 */ +.uk-tab-left > *, +.uk-tab-right > * { + padding-left: 0; +} +.uk-tab-left::before { + top: 0; + bottom: 0; + left: auto; + right: 0; + border-left: 1px solid #e5e5e5; + border-bottom: none; +} +.uk-tab-right::before { + top: 0; + bottom: 0; + left: 0; + right: auto; + border-left: 1px solid #e5e5e5; + border-bottom: none; +} +.uk-tab-left > * > a { + justify-content: left; + border-right: 1px solid transparent; + border-bottom: none; +} +.uk-tab-right > * > a { + justify-content: left; + border-left: 1px solid transparent; + border-bottom: none; +} +.uk-tab .uk-dropdown { + margin-left: 30px; +} +/* ======================================================================== + Component: Slidenav + ========================================================================== */ +/* + * Adopts `uk-icon` + */ +.uk-slidenav { + padding: 5px 10px; + color: rgba(102, 102, 102, 0.5); + transition: color 0.1s ease-in-out; +} +/* Hover */ +.uk-slidenav:hover { + color: rgba(102, 102, 102, 0.9); +} +/* OnClick */ +.uk-slidenav:active { + color: rgba(102, 102, 102, 0.5); +} +/* Icon modifier + ========================================================================== */ +/* + * Previous + */ +/* + * Next + */ +/* Size modifier + ========================================================================== */ +.uk-slidenav-large { + padding: 10px 10px; +} +/* Container + ========================================================================== */ +.uk-slidenav-container { + display: flex; +} +/* ======================================================================== + Component: Dotnav + ========================================================================== */ +/* + * 1. Allow items to wrap into the next line + * 2. Reset list + * 3. Gutter + */ +.uk-dotnav { + display: flex; + /* 1 */ + flex-wrap: wrap; + /* 2 */ + margin: 0; + padding: 0; + list-style: none; + /* 3 */ + margin-left: -12px; +} +/* + * 1. Space is allocated solely based on content dimensions: 0 0 auto + * 2. Gutter + */ +.uk-dotnav > * { + /* 1 */ + flex: none; + /* 2 */ + padding-left: 12px; +} +/* Items + ========================================================================== */ +/* + * Items + * 1. Hide text if present + */ +.uk-dotnav > * > * { + display: block; + box-sizing: border-box; + width: 10px; + height: 10px; + border-radius: 50%; + background: transparent; + /* 1 */ + text-indent: 100%; + overflow: hidden; + white-space: nowrap; + border: 1px solid rgba(102, 102, 102, 0.4); + transition: 0.2s ease-in-out; + transition-property: background-color, border-color; +} +/* Hover */ +.uk-dotnav > * > :hover { + background-color: rgba(102, 102, 102, 0.6); + border-color: transparent; +} +/* OnClick */ +.uk-dotnav > * > :active { + background-color: rgba(102, 102, 102, 0.2); + border-color: transparent; +} +/* Active */ +.uk-dotnav > .uk-active > * { + background-color: rgba(102, 102, 102, 0.6); + border-color: transparent; +} +/* Modifier: 'uk-dotnav-vertical' + ========================================================================== */ +/* + * 1. Change direction + * 2. Gutter + */ +.uk-dotnav-vertical { + /* 1 */ + flex-direction: column; + /* 2 */ + margin-left: 0; + margin-top: -12px; +} +/* 2 */ +.uk-dotnav-vertical > * { + padding-left: 0; + padding-top: 12px; +} +/* ======================================================================== + Component: Dropdown + ========================================================================== */ +/* + * Adopts `uk-drop` + * 1. Reset drop and let text expand the width instead of wrapping + * 2. Set a default width + * 3. Style + */ +.uk-dropdown { + --uk-position-offset: 10px; + --uk-position-viewport-offset: 15px; + --uk-inverse: dark; + /* 1 */ + width: auto; + /* 2 */ + min-width: 200px; + /* 3 */ + padding: 25px; + background: #fff; + color: #666; + box-shadow: 0 5px 12px rgba(0, 0, 0, 0.15); +} +/* + * Remove margin from the last-child + */ +.uk-dropdown > :last-child { + margin-bottom: 0; +} +.uk-dropdown :focus-visible { + outline-color: #333 !important; +} +/* Size modifier + ========================================================================== */ +.uk-dropdown-large { + padding: 40px; +} +/* Dropbar modifier + ========================================================================== */ +/* + * 1. Reset dropdown width to prevent to early shifting + * 2. Reset style + * 3. Padding + */ +.uk-dropdown-dropbar { + --uk-position-offset: 10px; + /* 1 */ + width: auto; + /* 2 */ + background: transparent; + /* 3 */ + padding: 5px 0 25px 0; + --uk-position-viewport-offset: 15px; + box-shadow: none; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-dropdown-dropbar { + --uk-position-viewport-offset: 30px; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-dropdown-dropbar { + --uk-position-viewport-offset: 40px; + } +} +.uk-dropdown-dropbar-large { + padding-top: 40px; + padding-bottom: 40px; +} +/* Nav + * Adopts `uk-nav` + ========================================================================== */ +.uk-dropdown-nav { + font-size: 0.875rem; +} +/* + * Items + */ +.uk-dropdown-nav > li > a { + color: #999; +} +/* Hover + Active */ +.uk-dropdown-nav > li > a:hover, +.uk-dropdown-nav > li.uk-active > a { + color: #666; +} +/* + * Subtitle + */ +.uk-dropdown-nav .uk-nav-subtitle { + font-size: 12px; +} +/* + * Header + */ +.uk-dropdown-nav .uk-nav-header { + color: #333; +} +/* + * Divider + */ +.uk-dropdown-nav .uk-nav-divider { + border-top: 1px solid #e5e5e5; +} +/* + * Sublists + */ +.uk-dropdown-nav .uk-nav-sub a { + color: #999; +} +.uk-dropdown-nav .uk-nav-sub a:hover, +.uk-dropdown-nav .uk-nav-sub li.uk-active > a { + color: #666; +} +/* ======================================================================== + Component: Lightbox + ========================================================================== */ +/* + * 1. Hide by default + * 2. Set position + * 3. Allow scrolling for the modal dialog + * 4. Horizontal padding + * 5. Mask the background page + * 6. Fade-in transition + * 7. Prevent cancellation of pointer events while dragging + */ +.uk-lightbox { + --uk-inverse: light; + /* 1 */ + display: none; + /* 2 */ + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1010; + /* 5 */ + background: #000; + /* 6 */ + opacity: 0; + transition: opacity 0.15s linear; + /* 7 */ + touch-action: pinch-zoom; +} +/* + * Open + * 1. Center child + * 2. Fade-in + */ +.uk-lightbox.uk-open { + display: block; + /* 2 */ + opacity: 1; +} +/* + * Focus + */ +.uk-lightbox :focus-visible { + outline-color: rgba(255, 255, 255, 0.7); +} +/* Page + ========================================================================== */ +/* + * Prevent scrollbars + */ +.uk-lightbox-page { + overflow: hidden; +} +/* Items + ========================================================================== */ +/* + * Reset list + */ +.uk-lightbox-items { + margin: 0; + padding: 0; + list-style: none; +} +/* + * 1. Center child within the viewport + * 2. Not visible by default + * 3. Optimize animation + * 4. Responsiveness + * Using `vh` for `max-height` to fix image proportions after resize in Safari and Opera + */ +.uk-lightbox-items > * { + /* 1 */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + /* 2 */ + display: none; + justify-content: center; + align-items: flex-start; + /* 3 */ + will-change: transform, opacity; + /* 4 */ + overflow: auto; +} +/* 2 */ +.uk-lightbox-items > .uk-active { + display: flex; +} +.uk-lightbox-items-fit > * { + align-items: center; +} +/* 4 */ +.uk-lightbox-items-fit > * > * { + max-width: 100vw; + max-height: 100vh; +} +.uk-lightbox-items-fit > * > :not(iframe) { + width: auto; + height: auto; +} +/* Zoom Cursor */ +.uk-lightbox-items.uk-lightbox-items-fit .uk-lightbox-zoom:hover { + cursor: zoom-in; +} +.uk-lightbox-items:not(.uk-lightbox-items-fit) .uk-lightbox-zoom:hover { + cursor: zoom-out; +} +/* Navs + ========================================================================== */ +.uk-lightbox-thumbnav-vertical :where(img, video) { + max-width: 100px; +} +.uk-lightbox-thumbnav:not(.uk-lightbox-thumbnav-vertical) :where(img, video) { + max-height: 100px; +} +.uk-lightbox-thumbnav:empty, +.uk-lightbox-dotnav:empty { + display: none; +} +/* Caption + ========================================================================== */ +.uk-lightbox-caption:empty { + display: none; +} +.uk-lightbox-caption { + padding: 10px 10px; + background: rgba(0, 0, 0, 0.3); + color: rgba(255, 255, 255, 0.7); +} +.uk-lightbox-caption > * { + color: rgba(255, 255, 255, 0.7); +} +/* Counter + ========================================================================== */ +.uk-lightbox-counter:empty { + display: none; +} +/* Iframe + ========================================================================== */ +.uk-lightbox-iframe { + width: 80%; + height: 80%; +} +/* ======================================================================== + Component: Animation + ========================================================================== */ +[class*="uk-animation-"] { + animation: 0.5s ease-out both; +} +/* Animations + ========================================================================== */ +/* + * Fade + */ +.uk-animation-fade { + animation-name: uk-fade; + animation-duration: 0.8s; + animation-timing-function: linear; +} +/* + * Scale + */ +.uk-animation-scale-up { + animation-name: uk-fade, uk-scale-up; +} +.uk-animation-scale-down { + animation-name: uk-fade, uk-scale-down; +} +/* + * Slide + */ +.uk-animation-slide-top { + animation-name: uk-fade, uk-slide-top; +} +.uk-animation-slide-bottom { + animation-name: uk-fade, uk-slide-bottom; +} +.uk-animation-slide-left { + animation-name: uk-fade, uk-slide-left; +} +.uk-animation-slide-right { + animation-name: uk-fade, uk-slide-right; +} +/* + * Slide Small + */ +.uk-animation-slide-top-small { + animation-name: uk-fade, uk-slide-top-small; +} +.uk-animation-slide-bottom-small { + animation-name: uk-fade, uk-slide-bottom-small; +} +.uk-animation-slide-left-small { + animation-name: uk-fade, uk-slide-left-small; +} +.uk-animation-slide-right-small { + animation-name: uk-fade, uk-slide-right-small; +} +/* + * Slide Medium + */ +.uk-animation-slide-top-medium { + animation-name: uk-fade, uk-slide-top-medium; +} +.uk-animation-slide-bottom-medium { + animation-name: uk-fade, uk-slide-bottom-medium; +} +.uk-animation-slide-left-medium { + animation-name: uk-fade, uk-slide-left-medium; +} +.uk-animation-slide-right-medium { + animation-name: uk-fade, uk-slide-right-medium; +} +/* + * Kenburns + */ +.uk-animation-kenburns { + animation-name: uk-kenburns; + animation-duration: 15s; +} +/* + * Shake + */ +.uk-animation-shake { + animation-name: uk-shake; +} +/* + * SVG Stroke + * The `--uk-animation-stroke` custom property contains the longest path length. + * Set it manually or use `uk-svg="stroke-animation: true"` to set it automatically. + * All strokes are animated by the same pace and doesn't end simultaneously. + * To end simultaneously, `pathLength="1"` could be used, but it's not working in Safari yet. + */ +.uk-animation-stroke { + animation-name: uk-stroke; + animation-duration: 2s; + stroke-dasharray: var(--uk-animation-stroke); +} +/* Direction modifier + ========================================================================== */ +.uk-animation-reverse { + animation-direction: reverse; + animation-timing-function: ease-in; +} +/* Duration modifier + ========================================================================== */ +.uk-animation-fast { + animation-duration: 0.1s; +} +/* Toggle animation based on the State of the Parent Element + ========================================================================== */ +.uk-animation-toggle:not(:hover):not(:focus) [class*="uk-animation-"] { + animation-name: none; +} +/* Keyframes used by animation classes + ========================================================================== */ +/* + * Fade + */ +@keyframes uk-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +/* + * Scale + */ +@keyframes uk-scale-up { + 0% { + transform: scale(0.9); + } + 100% { + transform: scale(1); + } +} +@keyframes uk-scale-down { + 0% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} +/* + * Slide + */ +@keyframes uk-slide-top { + 0% { + transform: translateY(-100%); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom { + 0% { + transform: translateY(100%); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(0); + } +} +/* + * Slide Small + */ +@keyframes uk-slide-top-small { + 0% { + transform: translateY(-10px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom-small { + 0% { + transform: translateY(10px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left-small { + 0% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right-small { + 0% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} +/* + * Slide Medium + */ +@keyframes uk-slide-top-medium { + 0% { + transform: translateY(-50px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-bottom-medium { + 0% { + transform: translateY(50px); + } + 100% { + transform: translateY(0); + } +} +@keyframes uk-slide-left-medium { + 0% { + transform: translateX(-50px); + } + 100% { + transform: translateX(0); + } +} +@keyframes uk-slide-right-medium { + 0% { + transform: translateX(50px); + } + 100% { + transform: translateX(0); + } +} +/* + * Kenburns + */ +@keyframes uk-kenburns { + 0% { + transform: scale(1); + } + 100% { + transform: scale(1.2); + } +} +/* + * Shake + */ +@keyframes uk-shake { + 0%, + 100% { + transform: translateX(0); + } + 10% { + transform: translateX(-9px); + } + 20% { + transform: translateX(8px); + } + 30% { + transform: translateX(-7px); + } + 40% { + transform: translateX(6px); + } + 50% { + transform: translateX(-5px); + } + 60% { + transform: translateX(4px); + } + 70% { + transform: translateX(-3px); + } + 80% { + transform: translateX(2px); + } + 90% { + transform: translateX(-1px); + } +} +/* + * Stroke + */ +@keyframes uk-stroke { + 0% { + stroke-dashoffset: var(--uk-animation-stroke); + } + 100% { + stroke-dashoffset: 0; + } +} +/* ======================================================================== + Component: Width + ========================================================================== */ +/* Equal child widths + ========================================================================== */ +[class*="uk-child-width"] > * { + box-sizing: border-box; + width: 100%; +} +.uk-child-width-1-2 > * { + width: 50%; +} +.uk-child-width-1-3 > * { + width: calc(100% / 3); +} +.uk-child-width-1-4 > * { + width: 25%; +} +.uk-child-width-1-5 > * { + width: 20%; +} +.uk-child-width-1-6 > * { + width: calc(100% / 6); +} +.uk-child-width-auto > * { + width: auto; +} +/* + * 1. Reset the `min-width`, which is set to auto by default, because + * flex items won't shrink below their minimum intrinsic content size. + * Using `1px` instead of `0`, so items still wrap into the next line, + * if they have zero width and padding and the predecessor is 100% wide. + */ +.uk-child-width-expand > :not([class*="uk-width"]) { + flex: 1; + /* 1 */ + min-width: 1px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-child-width-1-1\@s > * { + width: 100%; + } + .uk-child-width-1-2\@s > * { + width: 50%; + } + .uk-child-width-1-3\@s > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@s > * { + width: 25%; + } + .uk-child-width-1-5\@s > * { + width: 20%; + } + .uk-child-width-1-6\@s > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@s > * { + width: auto; + } + .uk-child-width-expand\@s > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@s > :not([class*="uk-width"]), + .uk-child-width-1-2\@s > :not([class*="uk-width"]), + .uk-child-width-1-3\@s > :not([class*="uk-width"]), + .uk-child-width-1-4\@s > :not([class*="uk-width"]), + .uk-child-width-1-5\@s > :not([class*="uk-width"]), + .uk-child-width-1-6\@s > :not([class*="uk-width"]), + .uk-child-width-auto\@s > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-child-width-1-1\@m > * { + width: 100%; + } + .uk-child-width-1-2\@m > * { + width: 50%; + } + .uk-child-width-1-3\@m > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@m > * { + width: 25%; + } + .uk-child-width-1-5\@m > * { + width: 20%; + } + .uk-child-width-1-6\@m > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@m > * { + width: auto; + } + .uk-child-width-expand\@m > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@m > :not([class*="uk-width"]), + .uk-child-width-1-2\@m > :not([class*="uk-width"]), + .uk-child-width-1-3\@m > :not([class*="uk-width"]), + .uk-child-width-1-4\@m > :not([class*="uk-width"]), + .uk-child-width-1-5\@m > :not([class*="uk-width"]), + .uk-child-width-1-6\@m > :not([class*="uk-width"]), + .uk-child-width-auto\@m > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-child-width-1-1\@l > * { + width: 100%; + } + .uk-child-width-1-2\@l > * { + width: 50%; + } + .uk-child-width-1-3\@l > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@l > * { + width: 25%; + } + .uk-child-width-1-5\@l > * { + width: 20%; + } + .uk-child-width-1-6\@l > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@l > * { + width: auto; + } + .uk-child-width-expand\@l > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@l > :not([class*="uk-width"]), + .uk-child-width-1-2\@l > :not([class*="uk-width"]), + .uk-child-width-1-3\@l > :not([class*="uk-width"]), + .uk-child-width-1-4\@l > :not([class*="uk-width"]), + .uk-child-width-1-5\@l > :not([class*="uk-width"]), + .uk-child-width-1-6\@l > :not([class*="uk-width"]), + .uk-child-width-auto\@l > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-child-width-1-1\@xl > * { + width: 100%; + } + .uk-child-width-1-2\@xl > * { + width: 50%; + } + .uk-child-width-1-3\@xl > * { + width: calc(100% / 3); + } + .uk-child-width-1-4\@xl > * { + width: 25%; + } + .uk-child-width-1-5\@xl > * { + width: 20%; + } + .uk-child-width-1-6\@xl > * { + width: calc(100% / 6); + } + .uk-child-width-auto\@xl > * { + width: auto; + } + .uk-child-width-expand\@xl > :not([class*="uk-width"]) { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-child-width-1-1\@xl > :not([class*="uk-width"]), + .uk-child-width-1-2\@xl > :not([class*="uk-width"]), + .uk-child-width-1-3\@xl > :not([class*="uk-width"]), + .uk-child-width-1-4\@xl > :not([class*="uk-width"]), + .uk-child-width-1-5\@xl > :not([class*="uk-width"]), + .uk-child-width-1-6\@xl > :not([class*="uk-width"]), + .uk-child-width-auto\@xl > :not([class*="uk-width"]) { + flex: initial; + } +} +/* Single Widths + ========================================================================== */ +/* + * 1. `max-width` is needed for the pixel-based classes + */ +[class*="uk-width"] { + box-sizing: border-box; + width: 100%; + /* 1 */ + max-width: 100%; +} +/* Halves */ +.uk-width-1-2 { + width: 50%; +} +/* Thirds */ +.uk-width-1-3 { + width: calc(100% / 3); +} +.uk-width-2-3 { + width: calc(200% / 3); +} +/* Quarters */ +.uk-width-1-4 { + width: 25%; +} +.uk-width-3-4 { + width: 75%; +} +/* Fifths */ +.uk-width-1-5 { + width: 20%; +} +.uk-width-2-5 { + width: 40%; +} +.uk-width-3-5 { + width: 60%; +} +.uk-width-4-5 { + width: 80%; +} +/* Sixths */ +.uk-width-1-6 { + width: calc(100% / 6); +} +.uk-width-5-6 { + width: calc(500% / 6); +} +/* Pixel */ +.uk-width-small { + width: 150px; +} +.uk-width-medium { + width: 300px; +} +.uk-width-large { + width: 450px; +} +.uk-width-xlarge { + width: 600px; +} +.uk-width-2xlarge { + width: 750px; +} +/* Auto */ +.uk-width-auto { + width: auto; +} +/* Expand */ +.uk-width-expand { + flex: 1; + min-width: 1px; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + /* Whole */ + .uk-width-1-1\@s { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@s { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@s { + width: calc(100% / 3); + } + .uk-width-2-3\@s { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@s { + width: 25%; + } + .uk-width-3-4\@s { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@s { + width: 20%; + } + .uk-width-2-5\@s { + width: 40%; + } + .uk-width-3-5\@s { + width: 60%; + } + .uk-width-4-5\@s { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@s { + width: calc(100% / 6); + } + .uk-width-5-6\@s { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@s { + width: 150px; + } + .uk-width-medium\@s { + width: 300px; + } + .uk-width-large\@s { + width: 450px; + } + .uk-width-xlarge\@s { + width: 600px; + } + .uk-width-2xlarge\@s { + width: 750px; + } + /* Auto */ + .uk-width-auto\@s { + width: auto; + } + /* Expand */ + .uk-width-expand\@s { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@s, + .uk-width-1-2\@s, + .uk-width-1-3\@s, + .uk-width-2-3\@s, + .uk-width-1-4\@s, + .uk-width-3-4\@s, + .uk-width-1-5\@s, + .uk-width-2-5\@s, + .uk-width-3-5\@s, + .uk-width-4-5\@s, + .uk-width-1-6\@s, + .uk-width-5-6\@s, + .uk-width-small\@s, + .uk-width-medium\@s, + .uk-width-large\@s, + .uk-width-xlarge\@s, + .uk-width-2xlarge\@s, + .uk-width-auto\@s { + flex: initial; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + /* Whole */ + .uk-width-1-1\@m { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@m { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@m { + width: calc(100% / 3); + } + .uk-width-2-3\@m { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@m { + width: 25%; + } + .uk-width-3-4\@m { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@m { + width: 20%; + } + .uk-width-2-5\@m { + width: 40%; + } + .uk-width-3-5\@m { + width: 60%; + } + .uk-width-4-5\@m { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@m { + width: calc(100% / 6); + } + .uk-width-5-6\@m { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@m { + width: 150px; + } + .uk-width-medium\@m { + width: 300px; + } + .uk-width-large\@m { + width: 450px; + } + .uk-width-xlarge\@m { + width: 600px; + } + .uk-width-2xlarge\@m { + width: 750px; + } + /* Auto */ + .uk-width-auto\@m { + width: auto; + } + /* Expand */ + .uk-width-expand\@m { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@m, + .uk-width-1-2\@m, + .uk-width-1-3\@m, + .uk-width-2-3\@m, + .uk-width-1-4\@m, + .uk-width-3-4\@m, + .uk-width-1-5\@m, + .uk-width-2-5\@m, + .uk-width-3-5\@m, + .uk-width-4-5\@m, + .uk-width-1-6\@m, + .uk-width-5-6\@m, + .uk-width-small\@m, + .uk-width-medium\@m, + .uk-width-large\@m, + .uk-width-xlarge\@m, + .uk-width-2xlarge\@m, + .uk-width-auto\@m { + flex: initial; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + /* Whole */ + .uk-width-1-1\@l { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@l { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@l { + width: calc(100% / 3); + } + .uk-width-2-3\@l { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@l { + width: 25%; + } + .uk-width-3-4\@l { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@l { + width: 20%; + } + .uk-width-2-5\@l { + width: 40%; + } + .uk-width-3-5\@l { + width: 60%; + } + .uk-width-4-5\@l { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@l { + width: calc(100% / 6); + } + .uk-width-5-6\@l { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@l { + width: 150px; + } + .uk-width-medium\@l { + width: 300px; + } + .uk-width-large\@l { + width: 450px; + } + .uk-width-xlarge\@l { + width: 600px; + } + .uk-width-2xlarge\@l { + width: 750px; + } + /* Auto */ + .uk-width-auto\@l { + width: auto; + } + /* Expand */ + .uk-width-expand\@l { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@l, + .uk-width-1-2\@l, + .uk-width-1-3\@l, + .uk-width-2-3\@l, + .uk-width-1-4\@l, + .uk-width-3-4\@l, + .uk-width-1-5\@l, + .uk-width-2-5\@l, + .uk-width-3-5\@l, + .uk-width-4-5\@l, + .uk-width-1-6\@l, + .uk-width-5-6\@l, + .uk-width-small\@l, + .uk-width-medium\@l, + .uk-width-large\@l, + .uk-width-xlarge\@l, + .uk-width-2xlarge\@l, + .uk-width-auto\@l { + flex: initial; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + /* Whole */ + .uk-width-1-1\@xl { + width: 100%; + } + /* Halves */ + .uk-width-1-2\@xl { + width: 50%; + } + /* Thirds */ + .uk-width-1-3\@xl { + width: calc(100% / 3); + } + .uk-width-2-3\@xl { + width: calc(200% / 3); + } + /* Quarters */ + .uk-width-1-4\@xl { + width: 25%; + } + .uk-width-3-4\@xl { + width: 75%; + } + /* Fifths */ + .uk-width-1-5\@xl { + width: 20%; + } + .uk-width-2-5\@xl { + width: 40%; + } + .uk-width-3-5\@xl { + width: 60%; + } + .uk-width-4-5\@xl { + width: 80%; + } + /* Sixths */ + .uk-width-1-6\@xl { + width: calc(100% / 6); + } + .uk-width-5-6\@xl { + width: calc(500% / 6); + } + /* Pixel */ + .uk-width-small\@xl { + width: 150px; + } + .uk-width-medium\@xl { + width: 300px; + } + .uk-width-large\@xl { + width: 450px; + } + .uk-width-xlarge\@xl { + width: 600px; + } + .uk-width-2xlarge\@xl { + width: 750px; + } + /* Auto */ + .uk-width-auto\@xl { + width: auto; + } + /* Expand */ + .uk-width-expand\@xl { + flex: 1; + min-width: 1px; + } + /* Reset expand */ + .uk-width-1-1\@xl, + .uk-width-1-2\@xl, + .uk-width-1-3\@xl, + .uk-width-2-3\@xl, + .uk-width-1-4\@xl, + .uk-width-3-4\@xl, + .uk-width-1-5\@xl, + .uk-width-2-5\@xl, + .uk-width-3-5\@xl, + .uk-width-4-5\@xl, + .uk-width-1-6\@xl, + .uk-width-5-6\@xl, + .uk-width-small\@xl, + .uk-width-medium\@xl, + .uk-width-large\@xl, + .uk-width-xlarge\@xl, + .uk-width-2xlarge\@xl, + .uk-width-auto\@xl { + flex: initial; + } +} +/* Intrinsic Widths + ========================================================================== */ +.uk-width-max-content { + width: max-content; +} +.uk-width-min-content { + width: min-content; +} +/* ======================================================================== + Component: Height + ========================================================================== */ +[class*="uk-height"] { + box-sizing: border-box; +} +/* + * Only works if parent element has a height set + */ +.uk-height-1-1 { + height: 100%; +} +/* + * Useful to create image teasers + */ +.uk-height-viewport { + min-height: 100vh; +} +.uk-height-viewport-2 { + min-height: 200vh; +} +.uk-height-viewport-3 { + min-height: 300vh; +} +.uk-height-viewport-4 { + min-height: 400vh; +} +/* + * Pixel + * Useful for `overflow: auto` + */ +.uk-height-small { + height: 150px; +} +.uk-height-medium { + height: 300px; +} +.uk-height-large { + height: 450px; +} +.uk-height-max-small { + max-height: 150px; +} +.uk-height-max-medium { + max-height: 300px; +} +.uk-height-max-large { + max-height: 450px; +} +/* ======================================================================== + Component: Text + ========================================================================== */ +/* Style modifiers + ========================================================================== */ +.uk-text-lead { + font-size: 1.5rem; + line-height: 1.5; + color: #333; +} +.uk-text-meta { + font-size: 0.875rem; + line-height: 1.4; + color: #999; +} +.uk-text-meta > a { + color: #999; +} +.uk-text-meta > a:hover { + color: #666; + text-decoration: none; +} +/* Size modifiers + ========================================================================== */ +.uk-text-small { + font-size: 0.875rem; + line-height: 1.5; +} +.uk-text-large { + font-size: 1.5rem; + line-height: 1.5; +} +.uk-text-default { + font-size: 16px; + line-height: 1.5; +} +/* Weight modifier + ========================================================================== */ +.uk-text-light { + font-weight: 300; +} +.uk-text-normal { + font-weight: 400; +} +.uk-text-bold { + font-weight: 700; +} +.uk-text-lighter { + font-weight: lighter; +} +.uk-text-bolder { + font-weight: bolder; +} +/* Style modifier + ========================================================================== */ +.uk-text-italic { + font-style: italic; +} +/* Transform modifier + ========================================================================== */ +.uk-text-capitalize { + text-transform: capitalize !important; +} +.uk-text-uppercase { + text-transform: uppercase !important; +} +.uk-text-lowercase { + text-transform: lowercase !important; +} +/* Decoration modifier + ========================================================================== */ +.uk-text-decoration-none { + text-decoration: none !important; +} +/* Color modifiers + ========================================================================== */ +.uk-text-muted { + color: #999 !important; +} +.uk-text-emphasis { + color: #333 !important; +} +.uk-text-primary { + color: #1e87f0 !important; +} +.uk-text-secondary { + color: #222 !important; +} +.uk-text-success { + color: #32d296 !important; +} +.uk-text-warning { + color: #faa05a !important; +} +.uk-text-danger { + color: #f0506e !important; +} +/* Background modifier + ========================================================================== */ +/* + * 1. The background clips to the foreground text. Works in all browsers. + * 2. Default color is set to transparent. + * 3. Container fits the text + * 4. Style + */ +.uk-text-background { + /* 1 */ + -webkit-background-clip: text; + /* 2 */ + color: transparent !important; + /* 3 */ + display: inline-block; + /* 4 */ + background-color: #1e87f0; + background-image: linear-gradient(90deg, #1e87f0 0%, #411ef0 100%); +} +/* Alignment modifiers + ========================================================================== */ +.uk-text-left { + text-align: left !important; +} +.uk-text-right { + text-align: right !important; +} +.uk-text-center { + text-align: center !important; +} +.uk-text-justify { + text-align: justify !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-text-left\@s { + text-align: left !important; + } + .uk-text-right\@s { + text-align: right !important; + } + .uk-text-center\@s { + text-align: center !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-text-left\@m { + text-align: left !important; + } + .uk-text-right\@m { + text-align: right !important; + } + .uk-text-center\@m { + text-align: center !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-text-left\@l { + text-align: left !important; + } + .uk-text-right\@l { + text-align: right !important; + } + .uk-text-center\@l { + text-align: center !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-text-left\@xl { + text-align: left !important; + } + .uk-text-right\@xl { + text-align: right !important; + } + .uk-text-center\@xl { + text-align: center !important; + } +} +/* + * Vertical + */ +.uk-text-top { + vertical-align: top !important; +} +.uk-text-middle { + vertical-align: middle !important; +} +.uk-text-bottom { + vertical-align: bottom !important; +} +.uk-text-baseline { + vertical-align: baseline !important; +} +/* Wrap modifiers + ========================================================================== */ +/* + * Prevent text from wrapping onto multiple lines + */ +.uk-text-nowrap { + white-space: nowrap; +} +/* + * 1. Make sure a max-width is set after which truncation can occur + * 2. Prevent text from wrapping onto multiple lines, and truncate with an ellipsis + * 3. Fix for table cells + */ +.uk-text-truncate { + /* 1 */ + max-width: 100%; + /* 2 */ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* 2 */ +th.uk-text-truncate, +td.uk-text-truncate { + max-width: 0; +} +/* + * Wrap long words onto the next line and break them if they are too long to fit. + * 1. Make it work with table cells in all browsers. + * Note: Not using `hyphens: auto` because it hyphenates text even if not needed. + */ +.uk-text-break { + overflow-wrap: break-word; +} +/* 1 */ +th.uk-text-break, +td.uk-text-break { + word-break: break-word; +} +/* Stroke modifiers + ========================================================================== */ +.uk-text-stroke { + -webkit-text-stroke: calc(1.4px + 0.002em); + -webkit-text-fill-color: transparent; +} +/* ======================================================================== + Component: Column + ========================================================================== */ +[class*="uk-column-"] { + column-gap: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + [class*="uk-column-"] { + column-gap: 40px; + } +} +/* + * Fix image 1px line wrapping into the next column in Chrome + */ +[class*="uk-column-"] img { + transform: translate3d(0, 0, 0); +} +/* Divider + ========================================================================== */ +/* + * 1. Double the column gap + */ +.uk-column-divider { + column-rule: 1px solid #e5e5e5; + /* 1 */ + column-gap: 60px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-column-divider { + column-gap: 80px; + } +} +/* Width modifiers + ========================================================================== */ +.uk-column-1-2 { + column-count: 2; +} +.uk-column-1-3 { + column-count: 3; +} +.uk-column-1-4 { + column-count: 4; +} +.uk-column-1-5 { + column-count: 5; +} +.uk-column-1-6 { + column-count: 6; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-column-1-2\@s { + column-count: 2; + } + .uk-column-1-3\@s { + column-count: 3; + } + .uk-column-1-4\@s { + column-count: 4; + } + .uk-column-1-5\@s { + column-count: 5; + } + .uk-column-1-6\@s { + column-count: 6; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-column-1-2\@m { + column-count: 2; + } + .uk-column-1-3\@m { + column-count: 3; + } + .uk-column-1-4\@m { + column-count: 4; + } + .uk-column-1-5\@m { + column-count: 5; + } + .uk-column-1-6\@m { + column-count: 6; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-column-1-2\@l { + column-count: 2; + } + .uk-column-1-3\@l { + column-count: 3; + } + .uk-column-1-4\@l { + column-count: 4; + } + .uk-column-1-5\@l { + column-count: 5; + } + .uk-column-1-6\@l { + column-count: 6; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-column-1-2\@xl { + column-count: 2; + } + .uk-column-1-3\@xl { + column-count: 3; + } + .uk-column-1-4\@xl { + column-count: 4; + } + .uk-column-1-5\@xl { + column-count: 5; + } + .uk-column-1-6\@xl { + column-count: 6; + } +} +/* Make element span across all columns + * Does not work in Firefox yet + ========================================================================== */ +.uk-column-span { + column-span: all; +} +/* ======================================================================== + Component: Cover + ========================================================================== */ +/* + * Works with iframes and embedded content + * 1. Use attribute to apply transform instantly. Needed if transform is transitioned. + * 2. Reset responsiveness for embedded content + * 3. Center object + * Note: Percent values on the `top` property only works if this element + * is absolute positioned or if the container has a height + */ +/* 1 */ +[uk-cover]:where(canvas, iframe, svg), +[data-uk-cover]:where(canvas, iframe, svg) { + /* 2 */ + max-width: none; + /* 3 */ + position: absolute; + left: 50%; + top: 50%; + --uk-position-translate-x: -50%; + --uk-position-translate-y: -50%; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)); +} +iframe[uk-cover], +iframe[data-uk-cover] { + pointer-events: none; +} +[uk-cover]:where(img, video), +[data-uk-cover]:where(img, video) { + /* 3 */ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-sizing: border-box; + object-fit: cover; + object-position: center; +} +/* Container + ========================================================================== */ +/* + * 1. Parent container which clips resized object + * 2. Needed if the child is positioned absolute. See note above + */ +.uk-cover-container { + /* 1 */ + overflow: hidden; + /* 2 */ + position: relative; +} +/* ======================================================================== + Component: Background + ========================================================================== */ +/* Color + ========================================================================== */ +.uk-background-default { + background-color: #fff; +} +.uk-background-muted { + background-color: #f8f8f8; +} +.uk-background-primary { + background-color: #1e87f0; +} +.uk-background-secondary { + background-color: #222; +} +/* Size + ========================================================================== */ +.uk-background-cover, +.uk-background-contain, +.uk-background-width-1-1, +.uk-background-height-1-1 { + background-position: 50% 50%; + background-repeat: no-repeat; +} +.uk-background-cover { + background-size: cover; +} +.uk-background-contain { + background-size: contain; +} +.uk-background-width-1-1 { + background-size: 100%; +} +.uk-background-height-1-1 { + background-size: auto 100%; +} +/* Position + ========================================================================== */ +.uk-background-top-left { + background-position: 0 0; +} +.uk-background-top-center { + background-position: 50% 0; +} +.uk-background-top-right { + background-position: 100% 0; +} +.uk-background-center-left { + background-position: 0 50%; +} +.uk-background-center-center { + background-position: 50% 50%; +} +.uk-background-center-right { + background-position: 100% 50%; +} +.uk-background-bottom-left { + background-position: 0 100%; +} +.uk-background-bottom-center { + background-position: 50% 100%; +} +.uk-background-bottom-right { + background-position: 100% 100%; +} +/* Repeat + ========================================================================== */ +.uk-background-norepeat { + background-repeat: no-repeat; +} +/* Attachment + ========================================================================== */ +.uk-background-fixed { + background-attachment: fixed; +} +/* + * Exclude touch devices because `fixed` doesn't work on iOS and Android + */ +@media (pointer: coarse) { + .uk-background-fixed { + background-attachment: scroll; + } +} +/* Image + ========================================================================== */ +/* Phone portrait and smaller */ +@media (max-width: 639px) { + .uk-background-image\@s { + background-image: none !important; + } +} +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-background-image\@m { + background-image: none !important; + } +} +/* Tablet landscape and smaller */ +@media (max-width: 1199px) { + .uk-background-image\@l { + background-image: none !important; + } +} +/* Desktop and smaller */ +@media (max-width: 1599px) { + .uk-background-image\@xl { + background-image: none !important; + } +} +/* Blend modes + ========================================================================== */ +.uk-background-blend-multiply { + background-blend-mode: multiply; +} +.uk-background-blend-screen { + background-blend-mode: screen; +} +.uk-background-blend-overlay { + background-blend-mode: overlay; +} +.uk-background-blend-darken { + background-blend-mode: darken; +} +.uk-background-blend-lighten { + background-blend-mode: lighten; +} +.uk-background-blend-color-dodge { + background-blend-mode: color-dodge; +} +.uk-background-blend-color-burn { + background-blend-mode: color-burn; +} +.uk-background-blend-hard-light { + background-blend-mode: hard-light; +} +.uk-background-blend-soft-light { + background-blend-mode: soft-light; +} +.uk-background-blend-difference { + background-blend-mode: difference; +} +.uk-background-blend-exclusion { + background-blend-mode: exclusion; +} +.uk-background-blend-hue { + background-blend-mode: hue; +} +.uk-background-blend-saturation { + background-blend-mode: saturation; +} +.uk-background-blend-color { + background-blend-mode: color; +} +.uk-background-blend-luminosity { + background-blend-mode: luminosity; +} +/* ======================================================================== + Component: Align + ========================================================================== */ +/* + * Default + */ +[class*="uk-align"] { + display: block; + margin-bottom: 30px; +} +* + [class*="uk-align"] { + margin-top: 30px; +} +/* + * Center + */ +.uk-align-center { + margin-left: auto; + margin-right: auto; +} +/* + * Left/Right + */ +.uk-align-left { + margin-top: 0; + margin-right: 30px; + float: left; +} +.uk-align-right { + margin-top: 0; + margin-left: 30px; + float: right; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-align-left\@s { + margin-top: 0; + margin-right: 30px; + float: left; + } + .uk-align-right\@s { + margin-top: 0; + margin-left: 30px; + float: right; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-align-left\@m { + margin-top: 0; + margin-right: 30px; + float: left; + } + .uk-align-right\@m { + margin-top: 0; + margin-left: 30px; + float: right; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-align-left\@l { + margin-top: 0; + float: left; + } + .uk-align-right\@l { + margin-top: 0; + float: right; + } + .uk-align-left, + .uk-align-left\@s, + .uk-align-left\@m, + .uk-align-left\@l { + margin-right: 40px; + } + .uk-align-right, + .uk-align-right\@s, + .uk-align-right\@m, + .uk-align-right\@l { + margin-left: 40px; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-align-left\@xl { + margin-top: 0; + margin-right: 40px; + float: left; + } + .uk-align-right\@xl { + margin-top: 0; + margin-left: 40px; + float: right; + } +} +/* ======================================================================== + Component: SVG + ========================================================================== */ +/* + * 1. Fill all SVG elements with the current text color if no `fill` attribute is set + * 2. Set the fill and stroke color of all SVG elements to the current text color + */ +/* 1 */ +.uk-svg, +.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve) { + fill: currentcolor; +} +.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve) { + stroke: currentcolor; +} +/* + * Fix Firefox blurry SVG rendering: https://bugzilla.mozilla.org/show_bug.cgi?id=1046835 + */ +.uk-svg { + transform: translate(0, 0); +} +/* ======================================================================== + Component: Utility + ========================================================================== */ +/* Panel + ========================================================================== */ +.uk-panel { + display: flow-root; + position: relative; + box-sizing: border-box; +} +/* + * Remove margin from the last-child + */ +.uk-panel > :last-child { + margin-bottom: 0; +} +/* + * Scrollable + */ +.uk-panel-scrollable { + height: 170px; + padding: 10px; + border: 1px solid #e5e5e5; + overflow: auto; + resize: both; +} +/* Clearfix + ========================================================================== */ +/* + * 1. `table-cell` is used with `::before` because `table` creates a 1px gap when it becomes a flex item, only in Webkit + * 2. `table` is used again with `::after` because `clear` only works with block elements. + * Note: `display: block` with `overflow: hidden` is currently not working in the latest Safari + */ +/* 1 */ +.uk-clearfix::before { + content: ""; + display: table-cell; +} +/* 2 */ +.uk-clearfix::after { + content: ""; + display: table; + clear: both; +} +/* Float + ========================================================================== */ +/* + * 1. Prevent content overflow + */ +.uk-float-left { + float: left; +} +.uk-float-right { + float: right; +} +/* 1 */ +[class*="uk-float-"] { + max-width: 100%; +} +/* Overflow + ========================================================================== */ +.uk-overflow-hidden { + overflow: hidden; +} +/* + * Enable scrollbars if content is clipped + */ +.uk-overflow-auto { + overflow: auto; +} +.uk-overflow-auto > :last-child { + margin-bottom: 0; +} +/* Box Sizing + ========================================================================== */ +.uk-box-sizing-content { + box-sizing: content-box; +} +.uk-box-sizing-border { + box-sizing: border-box; +} +/* Resize + ========================================================================== */ +.uk-resize { + resize: both; +} +.uk-resize-horizontal { + resize: horizontal; +} +.uk-resize-vertical { + resize: vertical; +} +/* Display + ========================================================================== */ +.uk-display-block { + display: block !important; +} +.uk-display-inline { + display: inline !important; +} +.uk-display-inline-block { + display: inline-block !important; +} +/* Inline + ========================================================================== */ +/* + * 1. Container fits its content + * 2. Create position context + * 3. Prevent content overflow + * 4. Behave like most inline-block elements + * 5. Force new layer without creating a new stacking context + * to fix 1px glitch when combined with overlays and transitions in Webkit + * 6. Clip child elements + */ +[class*="uk-inline"] { + /* 1 */ + display: inline-block; + /* 2 */ + position: relative; + /* 3 */ + max-width: 100%; + /* 4 */ + vertical-align: middle; + /* 5 */ + -webkit-backface-visibility: hidden; +} +.uk-inline-clip { + /* 6 */ + overflow: hidden; +} +/* Responsive objects + ========================================================================== */ +/* + * Preserve original dimensions + * Because `img, `video`, `canvas` and `audio` are already responsive by default, see Base component + */ +.uk-preserve-width, +.uk-preserve-width canvas, +.uk-preserve-width img, +.uk-preserve-width svg, +.uk-preserve-width video { + max-width: none; +} +/* + * Responsiveness + * Corrects `max-width` and `max-height` behavior if padding and border are used + */ +.uk-responsive-width, +.uk-responsive-height { + box-sizing: border-box; +} +/* + * 1. Set a maximum width. `important` needed to override `uk-preserve-width img` + * 2. Auto scale the height. Only needed if `height` attribute is present + */ +.uk-responsive-width { + /* 1 */ + max-width: 100% !important; + /* 2 */ + height: auto; +} +/* + * 1. Set a maximum height. Only works if the parent element has a fixed height + * 2. Auto scale the width. Only needed if `width` attribute is present + * 3. Reset max-width, which `img, `video`, `canvas` and `audio` already have by default + */ +.uk-responsive-height { + /* 1 */ + max-height: 100%; + /* 2 */ + width: auto; + /* 3 */ + max-width: none; +} +/* + * Fix initial iframe width. Without the viewport is expanded on iOS devices + */ +[uk-responsive], +[data-uk-responsive] { + max-width: 100%; +} +/* Object + ========================================================================== */ +.uk-object-cover { + object-fit: cover; +} +.uk-object-contain { + object-fit: contain; +} +.uk-object-fill { + object-fit: fill; +} +.uk-object-none { + object-fit: none; +} +.uk-object-scale-down { + object-fit: scale-down; +} +/* + * Position + */ +.uk-object-top-left { + object-position: 0 0; +} +.uk-object-top-center { + object-position: 50% 0; +} +.uk-object-top-right { + object-position: 100% 0; +} +.uk-object-center-left { + object-position: 0 50%; +} +.uk-object-center-center { + object-position: 50% 50%; +} +.uk-object-center-right { + object-position: 100% 50%; +} +.uk-object-bottom-left { + object-position: 0 100%; +} +.uk-object-bottom-center { + object-position: 50% 100%; +} +.uk-object-bottom-right { + object-position: 100% 100%; +} +/* Border + ========================================================================== */ +.uk-border-circle { + border-radius: 50%; +} +.uk-border-pill { + border-radius: 500px; +} +.uk-border-rounded { + border-radius: 5px; +} +/* + * Fix `overflow: hidden` to be ignored with border-radius and CSS transforms in Webkit + */ +.uk-inline-clip[class*="uk-border-"] { + -webkit-transform: translateZ(0); +} +/* Box-shadow + ========================================================================== */ +.uk-box-shadow-small { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-medium { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-large { + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-box-shadow-xlarge { + box-shadow: 0 28px 50px rgba(0, 0, 0, 0.16); +} +/* + * Hover + */ +[class*="uk-box-shadow-hover"] { + transition: box-shadow 0.1s ease-in-out; +} +.uk-box-shadow-hover-small:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-hover-medium:hover { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08); +} +.uk-box-shadow-hover-large:hover { + box-shadow: 0 14px 25px rgba(0, 0, 0, 0.16); +} +.uk-box-shadow-hover-xlarge:hover { + box-shadow: 0 28px 50px rgba(0, 0, 0, 0.16); +} +/* Box-shadow bottom + ========================================================================== */ +/* + * 1. Set position. + * 2. Set style + * 3. Fix shadow being clipped in Safari if container is animated + */ +@supports (filter: blur(0)) { + .uk-box-shadow-bottom { + display: inline-block; + position: relative; + z-index: 0; + max-width: 100%; + vertical-align: middle; + } + .uk-box-shadow-bottom::after { + content: ""; + /* 1 */ + position: absolute; + bottom: -30px; + left: 0; + right: 0; + z-index: -1; + /* 2 */ + height: 30px; + border-radius: 100%; + background: #444; + filter: blur(20px); + /* 3 */ + will-change: filter; + } +} +/* Drop cap + ========================================================================== */ +/* + * 1. Firefox doesn't apply `::first-letter` if the first letter is inside child elements + * https://bugzilla.mozilla.org/show_bug.cgi?id=214004 + * 2. In Firefox, a floating `::first-letter` doesn't have a line box and there for no `line-height` + * https://bugzilla.mozilla.org/show_bug.cgi?id=317933 + */ +.uk-dropcap::first-letter, +.uk-dropcap > p:first-of-type::first-letter { + display: block; + margin-right: 10px; + float: left; + font-size: 4.5em; + line-height: 1; + margin-bottom: -2px; +} +/* 2 */ +@-moz-document url-prefix() { + .uk-dropcap::first-letter, + .uk-dropcap > p:first-of-type::first-letter { + margin-top: 1.1%; + } +} +/* Logo + ========================================================================== */ +/* + * 1. Style + * 2. Required for `a` + * 3. Behave like image but can be overridden through flex utility classes + */ +.uk-logo { + /* 1 */ + font-size: 1.5rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + color: #333; + /* 2 */ + text-decoration: none; +} +/* 3 */ +:where(.uk-logo) { + display: inline-block; + vertical-align: middle; +} +/* Hover */ +.uk-logo:hover { + color: #333; + /* 1 */ + text-decoration: none; +} +.uk-logo :where(img, svg, video) { + display: block; +} +.uk-logo-inverse { + display: none; +} +/* Disabled State + ========================================================================== */ +.uk-disabled { + pointer-events: none; +} +/* Drag State + ========================================================================== */ +/* + * 1. Needed if moving over elements with have their own cursor on hover, e.g. links or buttons + * 2. Fix dragging over iframes + */ +.uk-drag, +.uk-drag * { + cursor: move; +} +/* 2 */ +.uk-drag iframe { + pointer-events: none; +} +/* Dragover State + ========================================================================== */ +/* + * Create a box-shadow when dragging a file over the upload area + */ +.uk-dragover { + box-shadow: 0 0 20px rgba(100, 100, 100, 0.3); +} +/* Blend modes + ========================================================================== */ +.uk-blend-multiply { + mix-blend-mode: multiply; +} +.uk-blend-screen { + mix-blend-mode: screen; +} +.uk-blend-overlay { + mix-blend-mode: overlay; +} +.uk-blend-darken { + mix-blend-mode: darken; +} +.uk-blend-lighten { + mix-blend-mode: lighten; +} +.uk-blend-color-dodge { + mix-blend-mode: color-dodge; +} +.uk-blend-color-burn { + mix-blend-mode: color-burn; +} +.uk-blend-hard-light { + mix-blend-mode: hard-light; +} +.uk-blend-soft-light { + mix-blend-mode: soft-light; +} +.uk-blend-difference { + mix-blend-mode: difference; +} +.uk-blend-exclusion { + mix-blend-mode: exclusion; +} +.uk-blend-hue { + mix-blend-mode: hue; +} +.uk-blend-saturation { + mix-blend-mode: saturation; +} +.uk-blend-color { + mix-blend-mode: color; +} +.uk-blend-luminosity { + mix-blend-mode: luminosity; +} +/* Transform +========================================================================== */ +.uk-transform-center { + transform: translate(-50%, -50%); +} +/* Transform Origin +========================================================================== */ +.uk-transform-origin-top-left { + transform-origin: 0 0; +} +.uk-transform-origin-top-center { + transform-origin: 50% 0; +} +.uk-transform-origin-top-right { + transform-origin: 100% 0; +} +.uk-transform-origin-center-left { + transform-origin: 0 50%; +} +.uk-transform-origin-center-right { + transform-origin: 100% 50%; +} +.uk-transform-origin-bottom-left { + transform-origin: 0 100%; +} +.uk-transform-origin-bottom-center { + transform-origin: 50% 100%; +} +.uk-transform-origin-bottom-right { + transform-origin: 100% 100%; +} +/* ======================================================================== + Component: Flex + ========================================================================== */ +.uk-flex { + display: flex; +} +.uk-flex-inline { + display: inline-flex; +} +/* Alignment + ========================================================================== */ +/* + * Align items along the main axis of the current line of the flex container + * Row: Horizontal + */ +.uk-flex-left { + justify-content: flex-start; +} +.uk-flex-center { + justify-content: center; +} +.uk-flex-right { + justify-content: flex-end; +} +.uk-flex-between { + justify-content: space-between; +} +.uk-flex-around { + justify-content: space-around; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-left\@s { + justify-content: flex-start; + } + .uk-flex-center\@s { + justify-content: center; + } + .uk-flex-right\@s { + justify-content: flex-end; + } + .uk-flex-between\@s { + justify-content: space-between; + } + .uk-flex-around\@s { + justify-content: space-around; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-left\@m { + justify-content: flex-start; + } + .uk-flex-center\@m { + justify-content: center; + } + .uk-flex-right\@m { + justify-content: flex-end; + } + .uk-flex-between\@m { + justify-content: space-between; + } + .uk-flex-around\@m { + justify-content: space-around; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-left\@l { + justify-content: flex-start; + } + .uk-flex-center\@l { + justify-content: center; + } + .uk-flex-right\@l { + justify-content: flex-end; + } + .uk-flex-between\@l { + justify-content: space-between; + } + .uk-flex-around\@l { + justify-content: space-around; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-left\@xl { + justify-content: flex-start; + } + .uk-flex-center\@xl { + justify-content: center; + } + .uk-flex-right\@xl { + justify-content: flex-end; + } + .uk-flex-between\@xl { + justify-content: space-between; + } + .uk-flex-around\@xl { + justify-content: space-around; + } +} +/* + * Align items in the cross axis of the current line of the flex container + * Row: Vertical + */ +.uk-flex-stretch { + align-items: stretch; +} +.uk-flex-top { + align-items: flex-start; +} +.uk-flex-middle { + align-items: center; +} +.uk-flex-bottom { + align-items: flex-end; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-stretch\@s { + align-items: stretch; + } + .uk-flex-top\@s { + align-items: flex-start; + } + .uk-flex-middle\@s { + align-items: center; + } + .uk-flex-bottom\@s { + align-items: flex-end; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-stretch\@m { + align-items: stretch; + } + .uk-flex-top\@m { + align-items: flex-start; + } + .uk-flex-middle\@m { + align-items: center; + } + .uk-flex-bottom\@m { + align-items: flex-end; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-stretch\@l { + align-items: stretch; + } + .uk-flex-top\@l { + align-items: flex-start; + } + .uk-flex-middle\@l { + align-items: center; + } + .uk-flex-bottom\@l { + align-items: flex-end; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-stretch\@xl { + align-items: stretch; + } + .uk-flex-top\@xl { + align-items: flex-start; + } + .uk-flex-middle\@xl { + align-items: center; + } + .uk-flex-bottom\@xl { + align-items: flex-end; + } +} +/* Direction + ========================================================================== */ +.uk-flex-row { + flex-direction: row; +} +.uk-flex-row-reverse { + flex-direction: row-reverse; +} +.uk-flex-column { + flex-direction: column; +} +.uk-flex-column-reverse { + flex-direction: column-reverse; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-row\@s { + flex-direction: row; + } + .uk-flex-column\@s { + flex-direction: column; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-row\@m { + flex-direction: row; + } + .uk-flex-column\@m { + flex-direction: column; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-row\@l { + flex-direction: row; + } + .uk-flex-column\@l { + flex-direction: column; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-row\@xl { + flex-direction: row; + } + .uk-flex-column\@xl { + flex-direction: column; + } +} +/* Wrap + ========================================================================== */ +.uk-flex-nowrap { + flex-wrap: nowrap; +} +.uk-flex-wrap { + flex-wrap: wrap; +} +.uk-flex-wrap-reverse { + flex-wrap: wrap-reverse; +} +/* + * Aligns items within the flex container when there is extra space in the cross-axis + * Only works if there is more than one line of flex items + */ +.uk-flex-wrap-stretch { + align-content: stretch; +} +.uk-flex-wrap-top { + align-content: flex-start; +} +.uk-flex-wrap-middle { + align-content: center; +} +.uk-flex-wrap-bottom { + align-content: flex-end; +} +.uk-flex-wrap-between { + align-content: space-between; +} +.uk-flex-wrap-around { + align-content: space-around; +} +/* Item ordering + ========================================================================== */ +/* + * Default is 0 + */ +.uk-flex-first { + order: -1; +} +.uk-flex-last { + order: 99; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-first\@s { + order: -1; + } + .uk-flex-last\@s { + order: 99; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-first\@m { + order: -1; + } + .uk-flex-last\@m { + order: 99; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-first\@l { + order: -1; + } + .uk-flex-last\@l { + order: 99; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-first\@xl { + order: -1; + } + .uk-flex-last\@xl { + order: 99; + } +} +/* Item dimensions + ========================================================================== */ +/* + * Initial: 0 1 auto + * Content dimensions, but shrinks + */ +.uk-flex-initial { + flex: initial; +} +/* + * No Flex: 0 0 auto + * Content dimensions + */ +.uk-flex-none { + flex: none; +} +/* + * Relative Flex: 1 1 auto + * Space is allocated considering content + */ +.uk-flex-auto { + flex: auto; +} +/* + * Absolute Flex: 1 1 0% + * Space is allocated solely based on flex + */ +.uk-flex-1 { + flex: 1; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-flex-initial\@s { + flex: initial; + } + .uk-flex-none\@s { + flex: none; + } + .uk-flex-1\@s { + flex: 1; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-flex-initial\@m { + flex: initial; + } + .uk-flex-none\@m { + flex: none; + } + .uk-flex-1\@m { + flex: 1; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-flex-initial\@l { + flex: initial; + } + .uk-flex-none\@l { + flex: none; + } + .uk-flex-1\@l { + flex: 1; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-flex-initial\@xl { + flex: initial; + } + .uk-flex-none\@xl { + flex: none; + } + .uk-flex-1\@xl { + flex: 1; + } +} +/* ======================================================================== + Component: Margin + ========================================================================== */ +/* + * Default + */ +.uk-margin { + margin-bottom: 20px; +} +* + .uk-margin { + margin-top: 20px !important; +} +.uk-margin-top { + margin-top: 20px !important; +} +.uk-margin-bottom { + margin-bottom: 20px !important; +} +.uk-margin-left { + margin-left: 20px !important; +} +.uk-margin-right { + margin-right: 20px !important; +} +/* XSmall + ========================================================================== */ +.uk-margin-xsmall { + margin-bottom: 5px; +} +* + .uk-margin-xsmall { + margin-top: 5px !important; +} +.uk-margin-xsmall-top { + margin-top: 5px !important; +} +.uk-margin-xsmall-bottom { + margin-bottom: 5px !important; +} +.uk-margin-xsmall-left { + margin-left: 5px !important; +} +.uk-margin-xsmall-right { + margin-right: 5px !important; +} +/* Small + ========================================================================== */ +.uk-margin-small { + margin-bottom: 10px; +} +* + .uk-margin-small { + margin-top: 10px !important; +} +.uk-margin-small-top { + margin-top: 10px !important; +} +.uk-margin-small-bottom { + margin-bottom: 10px !important; +} +.uk-margin-small-left { + margin-left: 10px !important; +} +.uk-margin-small-right { + margin-right: 10px !important; +} +/* Medium + ========================================================================== */ +.uk-margin-medium { + margin-bottom: 40px; +} +* + .uk-margin-medium { + margin-top: 40px !important; +} +.uk-margin-medium-top { + margin-top: 40px !important; +} +.uk-margin-medium-bottom { + margin-bottom: 40px !important; +} +.uk-margin-medium-left { + margin-left: 40px !important; +} +.uk-margin-medium-right { + margin-right: 40px !important; +} +/* Large + ========================================================================== */ +.uk-margin-large { + margin-bottom: 40px; +} +* + .uk-margin-large { + margin-top: 40px !important; +} +.uk-margin-large-top { + margin-top: 40px !important; +} +.uk-margin-large-bottom { + margin-bottom: 40px !important; +} +.uk-margin-large-left { + margin-left: 40px !important; +} +.uk-margin-large-right { + margin-right: 40px !important; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-large { + margin-bottom: 70px; + } + * + .uk-margin-large { + margin-top: 70px !important; + } + .uk-margin-large-top { + margin-top: 70px !important; + } + .uk-margin-large-bottom { + margin-bottom: 70px !important; + } + .uk-margin-large-left { + margin-left: 70px !important; + } + .uk-margin-large-right { + margin-right: 70px !important; + } +} +/* XLarge + ========================================================================== */ +.uk-margin-xlarge { + margin-bottom: 70px; +} +* + .uk-margin-xlarge { + margin-top: 70px !important; +} +.uk-margin-xlarge-top { + margin-top: 70px !important; +} +.uk-margin-xlarge-bottom { + margin-bottom: 70px !important; +} +.uk-margin-xlarge-left { + margin-left: 70px !important; +} +.uk-margin-xlarge-right { + margin-right: 70px !important; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-xlarge { + margin-bottom: 140px; + } + * + .uk-margin-xlarge { + margin-top: 140px !important; + } + .uk-margin-xlarge-top { + margin-top: 140px !important; + } + .uk-margin-xlarge-bottom { + margin-bottom: 140px !important; + } + .uk-margin-xlarge-left { + margin-left: 140px !important; + } + .uk-margin-xlarge-right { + margin-right: 140px !important; + } +} +/* Auto + ========================================================================== */ +.uk-margin-auto { + margin-left: auto !important; + margin-right: auto !important; +} +.uk-margin-auto-top { + margin-top: auto !important; +} +.uk-margin-auto-bottom { + margin-bottom: auto !important; +} +.uk-margin-auto-left { + margin-left: auto !important; +} +.uk-margin-auto-right { + margin-right: auto !important; +} +.uk-margin-auto-vertical { + margin-top: auto !important; + margin-bottom: auto !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-margin-auto\@s { + margin-left: auto !important; + margin-right: auto !important; + } + .uk-margin-auto-left\@s { + margin-left: auto !important; + } + .uk-margin-auto-right\@s { + margin-right: auto !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-margin-auto\@m { + margin-left: auto !important; + margin-right: auto !important; + } + .uk-margin-auto-left\@m { + margin-left: auto !important; + } + .uk-margin-auto-right\@m { + margin-right: auto !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-auto\@l { + margin-left: auto !important; + margin-right: auto !important; + } + .uk-margin-auto-left\@l { + margin-left: auto !important; + } + .uk-margin-auto-right\@l { + margin-right: auto !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-margin-auto\@xl { + margin-left: auto !important; + margin-right: auto !important; + } + .uk-margin-auto-left\@xl { + margin-left: auto !important; + } + .uk-margin-auto-right\@xl { + margin-right: auto !important; + } +} +/* Remove + ========================================================================== */ +.uk-margin-remove { + margin: 0 !important; +} +.uk-margin-remove-top { + margin-top: 0 !important; +} +.uk-margin-remove-bottom { + margin-bottom: 0 !important; +} +.uk-margin-remove-left { + margin-left: 0 !important; +} +.uk-margin-remove-right { + margin-right: 0 !important; +} +.uk-margin-remove-vertical { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.uk-margin-remove-adjacent + *, +.uk-margin-remove-first-child > :first-child { + margin-top: 0 !important; +} +.uk-margin-remove-last-child > :last-child { + margin-bottom: 0 !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-margin-remove-left\@s { + margin-left: 0 !important; + } + .uk-margin-remove-right\@s { + margin-right: 0 !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-margin-remove-left\@m { + margin-left: 0 !important; + } + .uk-margin-remove-right\@m { + margin-right: 0 !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-margin-remove-left\@l { + margin-left: 0 !important; + } + .uk-margin-remove-right\@l { + margin-right: 0 !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-margin-remove-left\@xl { + margin-left: 0 !important; + } + .uk-margin-remove-right\@xl { + margin-right: 0 !important; + } +} +/* ======================================================================== + Component: Padding + ========================================================================== */ +.uk-padding { + padding: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-padding { + padding: 40px; + } +} +/* Small + ========================================================================== */ +.uk-padding-small { + padding: 15px; +} +/* Large + ========================================================================== */ +.uk-padding-large { + padding: 40px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-padding-large { + padding: 70px; + } +} +/* Remove + ========================================================================== */ +.uk-padding-remove { + padding: 0 !important; +} +.uk-padding-remove-top { + padding-top: 0 !important; +} +.uk-padding-remove-bottom { + padding-bottom: 0 !important; +} +.uk-padding-remove-left { + padding-left: 0 !important; +} +.uk-padding-remove-right { + padding-right: 0 !important; +} +.uk-padding-remove-vertical { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.uk-padding-remove-horizontal { + padding-left: 0 !important; + padding-right: 0 !important; +} +/* ======================================================================== + Component: Position + ========================================================================== */ +:root { + --uk-position-margin-offset: 0px; +} +/* Directions + ========================================================================== */ +/* + * 1. Prevent content overflow. + */ +[class*="uk-position-top"], +[class*="uk-position-bottom"], +[class*="uk-position-left"], +[class*="uk-position-right"], +[class*="uk-position-center"] { + position: absolute !important; + /* 1 */ + max-width: calc(100% - (var(--uk-position-margin-offset) * 2)); + box-sizing: border-box; +} +/* + * Edges + * Don't use `width: 100%` because it's wrong if the parent has padding. + */ +.uk-position-top { + top: 0; + left: 0; + right: 0; +} +.uk-position-bottom { + bottom: 0; + left: 0; + right: 0; +} +.uk-position-left { + top: 0; + bottom: 0; + left: 0; +} +.uk-position-right { + top: 0; + bottom: 0; + right: 0; +} +/* + * Corners + */ +.uk-position-top-left { + top: 0; + left: 0; +} +.uk-position-top-right { + top: 0; + right: 0; +} +.uk-position-bottom-left { + bottom: 0; + left: 0; +} +.uk-position-bottom-right { + bottom: 0; + right: 0; +} +/* + * Center + * 1. Fix text wrapping if content is larger than 50% of the container. + * Using `max-content` requires `max-width` of 100% which is set generally. + */ +.uk-position-center { + top: calc(50% - var(--uk-position-margin-offset)); + left: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-x: -50%; + --uk-position-translate-y: -50%; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)); + /* 1 */ + width: max-content; +} +/* Vertical */ +[class*="uk-position-center-left"], +[class*="uk-position-center-right"], +.uk-position-center-vertical { + top: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-y: -50%; + transform: translate(0, var(--uk-position-translate-y)); +} +.uk-position-center-left { + left: 0; +} +.uk-position-center-right { + right: 0; +} +.uk-position-center-vertical { + left: 0; + right: 0; +} +.uk-position-center-left-out { + right: 100%; + width: max-content; +} +.uk-position-center-right-out { + left: 100%; + width: max-content; +} +/* Horizontal */ +.uk-position-top-center, +.uk-position-bottom-center, +.uk-position-center-horizontal { + left: calc(50% - var(--uk-position-margin-offset)); + --uk-position-translate-x: -50%; + transform: translate(var(--uk-position-translate-x), 0); + /* 1 */ + width: max-content; +} +.uk-position-top-center { + top: 0; +} +.uk-position-bottom-center { + bottom: 0; +} +.uk-position-center-horizontal { + top: 0; + bottom: 0; +} +/* + * Cover + */ +.uk-position-cover { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +/* Margin + ========================================================================== */ +.uk-position-small { + margin: 15px; + --uk-position-margin-offset: 15px; +} +.uk-position-medium { + margin: 30px; + --uk-position-margin-offset: 30px; +} +.uk-position-large { + margin: 30px; + --uk-position-margin-offset: 30px; +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-position-large { + margin: 50px; + --uk-position-margin-offset: 50px; + } +} +/* Schemes + ========================================================================== */ +.uk-position-relative { + position: relative !important; +} +.uk-position-absolute { + position: absolute !important; +} +.uk-position-fixed { + position: fixed !important; +} +.uk-position-sticky { + position: sticky !important; +} +/* Layer + ========================================================================== */ +.uk-position-z-index { + z-index: 1; +} +.uk-position-z-index-zero { + z-index: 0; +} +.uk-position-z-index-negative { + z-index: -1; +} +.uk-position-z-index-high { + z-index: 990; +} +/* ======================================================================== + Component: Transition + ========================================================================== */ +/* Transitions + ========================================================================== */ +/* + * The toggle is triggered on touch devices by two methods: + * 1. Using `:focus` and tabindex + * 2. Using `:hover` and a `touchstart` event listener registered on the document + * (Doesn't work on Surface touch devices) + */ +:where(.uk-transition-fade), +:where([class*="uk-transition-scale"]), +:where([class*="uk-transition-slide"]) { + --uk-position-translate-x: 0; + --uk-position-translate-y: 0; +} +.uk-transition-fade, +[class*="uk-transition-scale"], +[class*="uk-transition-slide"] { + --uk-translate-x: 0; + --uk-translate-y: 0; + --uk-scale-x: 1; + --uk-scale-y: 1; + transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y)); + transition: 0.3s ease-out; + transition-property: opacity, transform, filter; + opacity: 0; +} +/* + * Fade + */ +.uk-transition-toggle:hover .uk-transition-fade, +.uk-transition-toggle:focus .uk-transition-fade, +.uk-transition-toggle:focus-within .uk-transition-fade, +.uk-transition-active.uk-active .uk-transition-fade { + opacity: 1; +} +/* + * Scale + * 1. Make image rendering the same during the transition as before and after. Prefixed because of Safari. + */ +/* 1 */ +[class*="uk-transition-scale"] { + -webkit-backface-visibility: hidden; +} +.uk-transition-scale-up { + --uk-scale-x: 1; + --uk-scale-y: 1; +} +.uk-transition-scale-down { + --uk-scale-x: 1.03; + --uk-scale-y: 1.03; +} +/* Show */ +.uk-transition-toggle:hover .uk-transition-scale-up, +.uk-transition-toggle:focus .uk-transition-scale-up, +.uk-transition-toggle:focus-within .uk-transition-scale-up, +.uk-transition-active.uk-active .uk-transition-scale-up { + --uk-scale-x: 1.03; + --uk-scale-y: 1.03; + opacity: 1; +} +.uk-transition-toggle:hover .uk-transition-scale-down, +.uk-transition-toggle:focus .uk-transition-scale-down, +.uk-transition-toggle:focus-within .uk-transition-scale-down, +.uk-transition-active.uk-active .uk-transition-scale-down { + --uk-scale-x: 1; + --uk-scale-y: 1; + opacity: 1; +} +/* + * Slide + */ +.uk-transition-slide-top { + --uk-translate-y: -100%; +} +.uk-transition-slide-bottom { + --uk-translate-y: 100%; +} +.uk-transition-slide-left { + --uk-translate-x: -100%; +} +.uk-transition-slide-right { + --uk-translate-x: 100%; +} +.uk-transition-slide-top-small { + --uk-translate-y: calc(-1 * 10px); +} +.uk-transition-slide-bottom-small { + --uk-translate-y: 10px; +} +.uk-transition-slide-left-small { + --uk-translate-x: calc(-1 * 10px); +} +.uk-transition-slide-right-small { + --uk-translate-x: 10px; +} +.uk-transition-slide-top-medium { + --uk-translate-y: calc(-1 * 50px); +} +.uk-transition-slide-bottom-medium { + --uk-translate-y: 50px; +} +.uk-transition-slide-left-medium { + --uk-translate-x: calc(-1 * 50px); +} +.uk-transition-slide-right-medium { + --uk-translate-x: 50px; +} +/* Show */ +.uk-transition-toggle:hover [class*="uk-transition-slide"], +.uk-transition-toggle:focus [class*="uk-transition-slide"], +.uk-transition-toggle:focus-within [class*="uk-transition-slide"], +.uk-transition-active.uk-active [class*="uk-transition-slide"] { + --uk-translate-x: 0; + --uk-translate-y: 0; + opacity: 1; +} +/* Opacity modifier + ========================================================================== */ +.uk-transition-opaque { + opacity: 1; +} +/* Duration modifier + ========================================================================== */ +.uk-transition-slow { + transition-duration: 0.7s; +} +/* Disable modifier + ========================================================================== */ +.uk-transition-disable, +.uk-transition-disable * { + transition: none !important; +} +/* ======================================================================== + Component: Visibility + ========================================================================== */ +/* + * Hidden + * `hidden` attribute also set here to make it stronger + */ +[hidden], +.uk-hidden, +.uk-hidden-empty:empty { + display: none !important; +} +/* Phone landscape and bigger */ +@media (min-width: 640px) { + .uk-hidden\@s { + display: none !important; + } +} +/* Tablet landscape and bigger */ +@media (min-width: 960px) { + .uk-hidden\@m { + display: none !important; + } +} +/* Desktop and bigger */ +@media (min-width: 1200px) { + .uk-hidden\@l { + display: none !important; + } +} +/* Large screen and bigger */ +@media (min-width: 1600px) { + .uk-hidden\@xl { + display: none !important; + } +} +/* + * Visible + */ +/* Phone portrait and smaller */ +@media (max-width: 639px) { + .uk-visible\@s { + display: none !important; + } +} +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-visible\@m { + display: none !important; + } +} +/* Tablet landscape and smaller */ +@media (max-width: 1199px) { + .uk-visible\@l { + display: none !important; + } +} +/* Desktop and smaller */ +@media (max-width: 1599px) { + .uk-visible\@xl { + display: none !important; + } +} +/* Visibility + ========================================================================== */ +.uk-invisible { + visibility: hidden !important; +} +/* Based on the State of the Parent Element + ========================================================================== */ +/* + * Mind that `display: none`, `visibility: hidden` and `opacity: 0` + * remove the element from the accessibility tree and that + * `display: none` and `visibility: hidden` are not focusable. + * + * The target stays visible if any element within receives focus through keyboard. + */ +/* + * Remove space when hidden. + * 1. Remove from document flow. + * 2. Hide element and shrink its dimension. Current browsers and screen readers + * keep the element in the accessibility tree even with zero dimensions. + * Using `tabindex="-1"` will show the element on touch devices. + * Note: `clip-path` doesn't work with `tabindex` on touch devices. + */ +.uk-hidden-visually:not(:focus):not(:active):not(:focus-within), +.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)), +.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) { + /* 1 */ + position: absolute !important; + /* 2 */ + width: 0 !important; + height: 0 !important; + padding: 0 !important; + border: 0 !important; + margin: 0 !important; + overflow: hidden !important; +} +/* + * Keep space when hidden. + * Hide element without shrinking its dimension. + * Note: `clip-path` doesn't work with hover for elements outside of the toggle box. + */ +.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { + opacity: 0 !important; +} +/* Based on Hover Capability of the Pointing Device + ========================================================================== */ +/* + * Hover + */ +/* Hide if primary pointing device doesn't support hover, e.g. touch screens. */ +@media (hover: none) { + .uk-hidden-touch { + display: none !important; + } +} +/* Hide if primary pointing device supports hover, e.g. mice. */ +@media (hover) { + .uk-hidden-notouch { + display: none !important; + } +} +/* ======================================================================== + Component: Inverse + ========================================================================== */ +/* + * Implemented class depends on the general theme color + * `uk-light` is for light colors on dark backgrounds + * `uk-dark` is or dark colors on light backgrounds + */ +.uk-light, +.uk-section-primary:not(.uk-preserve-color), +.uk-section-secondary:not(.uk-preserve-color), +.uk-tile-primary:not(.uk-preserve-color), +.uk-tile-secondary:not(.uk-preserve-color), +.uk-card-primary.uk-card-body, +.uk-card-primary > :not([class*="uk-card-media"]), +.uk-card-secondary.uk-card-body, +.uk-card-secondary > :not([class*="uk-card-media"]), +.uk-overlay-primary, +.uk-offcanvas-bar { + color: rgba(255, 255, 255, 0.7); + /* Webkit */ + /* Firefox */ + /* Webkit */ + /* Firefox */ +} +.uk-light a, +.uk-light .uk-link, +.uk-section-primary:not(.uk-preserve-color) a, +.uk-section-primary:not(.uk-preserve-color) .uk-link, +.uk-section-secondary:not(.uk-preserve-color) a, +.uk-section-secondary:not(.uk-preserve-color) .uk-link, +.uk-tile-primary:not(.uk-preserve-color) a, +.uk-tile-primary:not(.uk-preserve-color) .uk-link, +.uk-tile-secondary:not(.uk-preserve-color) a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link, +.uk-card-primary.uk-card-body a, +.uk-card-primary.uk-card-body .uk-link, +.uk-card-primary > :not([class*="uk-card-media"]) a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link, +.uk-card-secondary.uk-card-body a, +.uk-card-secondary.uk-card-body .uk-link, +.uk-card-secondary > :not([class*="uk-card-media"]) a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link, +.uk-overlay-primary a, +.uk-overlay-primary .uk-link, +.uk-offcanvas-bar a, +.uk-offcanvas-bar .uk-link { + color: #fff; +} +.uk-light a:hover, +.uk-light .uk-link:hover, +.uk-light .uk-link-toggle:hover .uk-link, +.uk-section-primary:not(.uk-preserve-color) a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-section-secondary:not(.uk-preserve-color) a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-tile-primary:not(.uk-preserve-color) a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-tile-secondary:not(.uk-preserve-color) a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link, +.uk-card-primary.uk-card-body a:hover, +.uk-card-primary.uk-card-body .uk-link:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link, +.uk-card-primary > :not([class*="uk-card-media"]) a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link, +.uk-card-secondary.uk-card-body a:hover, +.uk-card-secondary.uk-card-body .uk-link:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link, +.uk-card-secondary > :not([class*="uk-card-media"]) a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link, +.uk-overlay-primary a:hover, +.uk-overlay-primary .uk-link:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link, +.uk-offcanvas-bar a:hover, +.uk-offcanvas-bar .uk-link:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link { + color: #fff; +} +.uk-light :not(pre) > code, +.uk-light :not(pre) > kbd, +.uk-light :not(pre) > samp, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > code, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-section-primary:not(.uk-preserve-color) :not(pre) > samp, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > code, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-section-secondary:not(.uk-preserve-color) :not(pre) > samp, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > code, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-tile-primary:not(.uk-preserve-color) :not(pre) > samp, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > code, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > kbd, +.uk-tile-secondary:not(.uk-preserve-color) :not(pre) > samp, +.uk-card-primary.uk-card-body :not(pre) > code, +.uk-card-primary.uk-card-body :not(pre) > kbd, +.uk-card-primary.uk-card-body :not(pre) > samp, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > code, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > kbd, +.uk-card-primary > :not([class*="uk-card-media"]) :not(pre) > samp, +.uk-card-secondary.uk-card-body :not(pre) > code, +.uk-card-secondary.uk-card-body :not(pre) > kbd, +.uk-card-secondary.uk-card-body :not(pre) > samp, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > code, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > kbd, +.uk-card-secondary > :not([class*="uk-card-media"]) :not(pre) > samp, +.uk-overlay-primary :not(pre) > code, +.uk-overlay-primary :not(pre) > kbd, +.uk-overlay-primary :not(pre) > samp, +.uk-offcanvas-bar :not(pre) > code, +.uk-offcanvas-bar :not(pre) > kbd, +.uk-offcanvas-bar :not(pre) > samp { + color: rgba(255, 255, 255, 0.7); + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light em, +.uk-section-primary:not(.uk-preserve-color) em, +.uk-section-secondary:not(.uk-preserve-color) em, +.uk-tile-primary:not(.uk-preserve-color) em, +.uk-tile-secondary:not(.uk-preserve-color) em, +.uk-card-primary.uk-card-body em, +.uk-card-primary > :not([class*="uk-card-media"]) em, +.uk-card-secondary.uk-card-body em, +.uk-card-secondary > :not([class*="uk-card-media"]) em, +.uk-overlay-primary em, +.uk-offcanvas-bar em { + color: #fff; +} +.uk-light h1, +.uk-light .uk-h1, +.uk-light h2, +.uk-light .uk-h2, +.uk-light h3, +.uk-light .uk-h3, +.uk-light h4, +.uk-light .uk-h4, +.uk-light h5, +.uk-light .uk-h5, +.uk-light h6, +.uk-light .uk-h6, +.uk-light .uk-heading-small, +.uk-light .uk-heading-medium, +.uk-light .uk-heading-large, +.uk-light .uk-heading-xlarge, +.uk-light .uk-heading-2xlarge, +.uk-light .uk-heading-3xlarge, +.uk-section-primary:not(.uk-preserve-color) h1, +.uk-section-primary:not(.uk-preserve-color) .uk-h1, +.uk-section-primary:not(.uk-preserve-color) h2, +.uk-section-primary:not(.uk-preserve-color) .uk-h2, +.uk-section-primary:not(.uk-preserve-color) h3, +.uk-section-primary:not(.uk-preserve-color) .uk-h3, +.uk-section-primary:not(.uk-preserve-color) h4, +.uk-section-primary:not(.uk-preserve-color) .uk-h4, +.uk-section-primary:not(.uk-preserve-color) h5, +.uk-section-primary:not(.uk-preserve-color) .uk-h5, +.uk-section-primary:not(.uk-preserve-color) h6, +.uk-section-primary:not(.uk-preserve-color) .uk-h6, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-small, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-large, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-section-secondary:not(.uk-preserve-color) h1, +.uk-section-secondary:not(.uk-preserve-color) .uk-h1, +.uk-section-secondary:not(.uk-preserve-color) h2, +.uk-section-secondary:not(.uk-preserve-color) .uk-h2, +.uk-section-secondary:not(.uk-preserve-color) h3, +.uk-section-secondary:not(.uk-preserve-color) .uk-h3, +.uk-section-secondary:not(.uk-preserve-color) h4, +.uk-section-secondary:not(.uk-preserve-color) .uk-h4, +.uk-section-secondary:not(.uk-preserve-color) h5, +.uk-section-secondary:not(.uk-preserve-color) .uk-h5, +.uk-section-secondary:not(.uk-preserve-color) h6, +.uk-section-secondary:not(.uk-preserve-color) .uk-h6, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-tile-primary:not(.uk-preserve-color) h1, +.uk-tile-primary:not(.uk-preserve-color) .uk-h1, +.uk-tile-primary:not(.uk-preserve-color) h2, +.uk-tile-primary:not(.uk-preserve-color) .uk-h2, +.uk-tile-primary:not(.uk-preserve-color) h3, +.uk-tile-primary:not(.uk-preserve-color) .uk-h3, +.uk-tile-primary:not(.uk-preserve-color) h4, +.uk-tile-primary:not(.uk-preserve-color) .uk-h4, +.uk-tile-primary:not(.uk-preserve-color) h5, +.uk-tile-primary:not(.uk-preserve-color) .uk-h5, +.uk-tile-primary:not(.uk-preserve-color) h6, +.uk-tile-primary:not(.uk-preserve-color) .uk-h6, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-tile-secondary:not(.uk-preserve-color) h1, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h1, +.uk-tile-secondary:not(.uk-preserve-color) h2, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h2, +.uk-tile-secondary:not(.uk-preserve-color) h3, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h3, +.uk-tile-secondary:not(.uk-preserve-color) h4, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h4, +.uk-tile-secondary:not(.uk-preserve-color) h5, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h5, +.uk-tile-secondary:not(.uk-preserve-color) h6, +.uk-tile-secondary:not(.uk-preserve-color) .uk-h6, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge, +.uk-card-primary.uk-card-body h1, +.uk-card-primary.uk-card-body .uk-h1, +.uk-card-primary.uk-card-body h2, +.uk-card-primary.uk-card-body .uk-h2, +.uk-card-primary.uk-card-body h3, +.uk-card-primary.uk-card-body .uk-h3, +.uk-card-primary.uk-card-body h4, +.uk-card-primary.uk-card-body .uk-h4, +.uk-card-primary.uk-card-body h5, +.uk-card-primary.uk-card-body .uk-h5, +.uk-card-primary.uk-card-body h6, +.uk-card-primary.uk-card-body .uk-h6, +.uk-card-primary.uk-card-body .uk-heading-small, +.uk-card-primary.uk-card-body .uk-heading-medium, +.uk-card-primary.uk-card-body .uk-heading-large, +.uk-card-primary.uk-card-body .uk-heading-xlarge, +.uk-card-primary.uk-card-body .uk-heading-2xlarge, +.uk-card-primary.uk-card-body .uk-heading-3xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) h1, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h1, +.uk-card-primary > :not([class*="uk-card-media"]) h2, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h2, +.uk-card-primary > :not([class*="uk-card-media"]) h3, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h3, +.uk-card-primary > :not([class*="uk-card-media"]) h4, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h4, +.uk-card-primary > :not([class*="uk-card-media"]) h5, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h5, +.uk-card-primary > :not([class*="uk-card-media"]) h6, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-h6, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-small, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-medium, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-large, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-2xlarge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-3xlarge, +.uk-card-secondary.uk-card-body h1, +.uk-card-secondary.uk-card-body .uk-h1, +.uk-card-secondary.uk-card-body h2, +.uk-card-secondary.uk-card-body .uk-h2, +.uk-card-secondary.uk-card-body h3, +.uk-card-secondary.uk-card-body .uk-h3, +.uk-card-secondary.uk-card-body h4, +.uk-card-secondary.uk-card-body .uk-h4, +.uk-card-secondary.uk-card-body h5, +.uk-card-secondary.uk-card-body .uk-h5, +.uk-card-secondary.uk-card-body h6, +.uk-card-secondary.uk-card-body .uk-h6, +.uk-card-secondary.uk-card-body .uk-heading-small, +.uk-card-secondary.uk-card-body .uk-heading-medium, +.uk-card-secondary.uk-card-body .uk-heading-large, +.uk-card-secondary.uk-card-body .uk-heading-xlarge, +.uk-card-secondary.uk-card-body .uk-heading-2xlarge, +.uk-card-secondary.uk-card-body .uk-heading-3xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) h1, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h1, +.uk-card-secondary > :not([class*="uk-card-media"]) h2, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h2, +.uk-card-secondary > :not([class*="uk-card-media"]) h3, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h3, +.uk-card-secondary > :not([class*="uk-card-media"]) h4, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h4, +.uk-card-secondary > :not([class*="uk-card-media"]) h5, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h5, +.uk-card-secondary > :not([class*="uk-card-media"]) h6, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-h6, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-small, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-medium, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-large, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-2xlarge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-3xlarge, +.uk-overlay-primary h1, +.uk-overlay-primary .uk-h1, +.uk-overlay-primary h2, +.uk-overlay-primary .uk-h2, +.uk-overlay-primary h3, +.uk-overlay-primary .uk-h3, +.uk-overlay-primary h4, +.uk-overlay-primary .uk-h4, +.uk-overlay-primary h5, +.uk-overlay-primary .uk-h5, +.uk-overlay-primary h6, +.uk-overlay-primary .uk-h6, +.uk-overlay-primary .uk-heading-small, +.uk-overlay-primary .uk-heading-medium, +.uk-overlay-primary .uk-heading-large, +.uk-overlay-primary .uk-heading-xlarge, +.uk-overlay-primary .uk-heading-2xlarge, +.uk-overlay-primary .uk-heading-3xlarge, +.uk-offcanvas-bar h1, +.uk-offcanvas-bar .uk-h1, +.uk-offcanvas-bar h2, +.uk-offcanvas-bar .uk-h2, +.uk-offcanvas-bar h3, +.uk-offcanvas-bar .uk-h3, +.uk-offcanvas-bar h4, +.uk-offcanvas-bar .uk-h4, +.uk-offcanvas-bar h5, +.uk-offcanvas-bar .uk-h5, +.uk-offcanvas-bar h6, +.uk-offcanvas-bar .uk-h6, +.uk-offcanvas-bar .uk-heading-small, +.uk-offcanvas-bar .uk-heading-medium, +.uk-offcanvas-bar .uk-heading-large, +.uk-offcanvas-bar .uk-heading-xlarge, +.uk-offcanvas-bar .uk-heading-2xlarge, +.uk-offcanvas-bar .uk-heading-3xlarge { + color: #fff; +} +.uk-light blockquote, +.uk-section-primary:not(.uk-preserve-color) blockquote, +.uk-section-secondary:not(.uk-preserve-color) blockquote, +.uk-tile-primary:not(.uk-preserve-color) blockquote, +.uk-tile-secondary:not(.uk-preserve-color) blockquote, +.uk-card-primary.uk-card-body blockquote, +.uk-card-primary > :not([class*="uk-card-media"]) blockquote, +.uk-card-secondary.uk-card-body blockquote, +.uk-card-secondary > :not([class*="uk-card-media"]) blockquote, +.uk-overlay-primary blockquote, +.uk-offcanvas-bar blockquote { + color: #fff; +} +.uk-light blockquote footer, +.uk-section-primary:not(.uk-preserve-color) blockquote footer, +.uk-section-secondary:not(.uk-preserve-color) blockquote footer, +.uk-tile-primary:not(.uk-preserve-color) blockquote footer, +.uk-tile-secondary:not(.uk-preserve-color) blockquote footer, +.uk-card-primary.uk-card-body blockquote footer, +.uk-card-primary > :not([class*="uk-card-media"]) blockquote footer, +.uk-card-secondary.uk-card-body blockquote footer, +.uk-card-secondary > :not([class*="uk-card-media"]) blockquote footer, +.uk-overlay-primary blockquote footer, +.uk-offcanvas-bar blockquote footer { + color: rgba(255, 255, 255, 0.7); +} +.uk-light hr, +.uk-light .uk-hr, +.uk-section-primary:not(.uk-preserve-color) hr, +.uk-section-primary:not(.uk-preserve-color) .uk-hr, +.uk-section-secondary:not(.uk-preserve-color) hr, +.uk-section-secondary:not(.uk-preserve-color) .uk-hr, +.uk-tile-primary:not(.uk-preserve-color) hr, +.uk-tile-primary:not(.uk-preserve-color) .uk-hr, +.uk-tile-secondary:not(.uk-preserve-color) hr, +.uk-tile-secondary:not(.uk-preserve-color) .uk-hr, +.uk-card-primary.uk-card-body hr, +.uk-card-primary.uk-card-body .uk-hr, +.uk-card-primary > :not([class*="uk-card-media"]) hr, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-hr, +.uk-card-secondary.uk-card-body hr, +.uk-card-secondary.uk-card-body .uk-hr, +.uk-card-secondary > :not([class*="uk-card-media"]) hr, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-hr, +.uk-overlay-primary hr, +.uk-overlay-primary .uk-hr, +.uk-offcanvas-bar hr, +.uk-offcanvas-bar .uk-hr { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light :focus-visible, +.uk-section-primary:not(.uk-preserve-color) :focus-visible, +.uk-section-secondary:not(.uk-preserve-color) :focus-visible, +.uk-tile-primary:not(.uk-preserve-color) :focus-visible, +.uk-tile-secondary:not(.uk-preserve-color) :focus-visible, +.uk-card-primary.uk-card-body :focus-visible, +.uk-card-primary > :not([class*="uk-card-media"]) :focus-visible, +.uk-card-secondary.uk-card-body :focus-visible, +.uk-card-secondary > :not([class*="uk-card-media"]) :focus-visible, +.uk-overlay-primary :focus-visible, +.uk-offcanvas-bar :focus-visible { + outline-color: #fff; +} +.uk-light a.uk-link-muted, +.uk-light .uk-link-muted a, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted, +.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a, +.uk-card-primary.uk-card-body a.uk-link-muted, +.uk-card-primary.uk-card-body .uk-link-muted a, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-muted, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-muted a, +.uk-card-secondary.uk-card-body a.uk-link-muted, +.uk-card-secondary.uk-card-body .uk-link-muted a, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-muted a, +.uk-overlay-primary a.uk-link-muted, +.uk-overlay-primary .uk-link-muted a, +.uk-offcanvas-bar a.uk-link-muted, +.uk-offcanvas-bar .uk-link-muted a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light a.uk-link-muted:hover, +.uk-light .uk-link-muted a:hover, +.uk-light .uk-link-toggle:hover .uk-link-muted, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted, +.uk-card-primary.uk-card-body a.uk-link-muted:hover, +.uk-card-primary.uk-card-body .uk-link-muted a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-muted:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-muted a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-muted, +.uk-card-secondary.uk-card-body a.uk-link-muted:hover, +.uk-card-secondary.uk-card-body .uk-link-muted a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-muted:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-muted a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-muted, +.uk-overlay-primary a.uk-link-muted:hover, +.uk-overlay-primary .uk-link-muted a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted, +.uk-offcanvas-bar a.uk-link-muted:hover, +.uk-offcanvas-bar .uk-link-muted a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted { + color: rgba(255, 255, 255, 0.7); +} +.uk-light a.uk-link-text:hover, +.uk-light .uk-link-text a:hover, +.uk-light .uk-link-toggle:hover .uk-link-text, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text, +.uk-card-primary.uk-card-body a.uk-link-text:hover, +.uk-card-primary.uk-card-body .uk-link-text a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-text:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-text a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-text, +.uk-card-secondary.uk-card-body a.uk-link-text:hover, +.uk-card-secondary.uk-card-body .uk-link-text a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-text:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-text a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-text, +.uk-overlay-primary a.uk-link-text:hover, +.uk-overlay-primary .uk-link-text a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-text, +.uk-offcanvas-bar a.uk-link-text:hover, +.uk-offcanvas-bar .uk-link-text a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text { + color: rgba(255, 255, 255, 0.5); +} +.uk-light a.uk-link-heading:hover, +.uk-light .uk-link-heading a:hover, +.uk-light .uk-link-toggle:hover .uk-link-heading, +.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading, +.uk-card-primary.uk-card-body a.uk-link-heading:hover, +.uk-card-primary.uk-card-body .uk-link-heading a:hover, +.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading, +.uk-card-primary > :not([class*="uk-card-media"]) a.uk-link-heading:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-heading a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-heading, +.uk-card-secondary.uk-card-body a.uk-link-heading:hover, +.uk-card-secondary.uk-card-body .uk-link-heading a:hover, +.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading, +.uk-card-secondary > :not([class*="uk-card-media"]) a.uk-link-heading:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-heading a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-link-toggle:hover .uk-link-heading, +.uk-overlay-primary a.uk-link-heading:hover, +.uk-overlay-primary .uk-link-heading a:hover, +.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading, +.uk-offcanvas-bar a.uk-link-heading:hover, +.uk-offcanvas-bar .uk-link-heading a:hover, +.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading { + color: #fff; +} +.uk-light .uk-heading-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider, +.uk-card-primary.uk-card-body .uk-heading-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-divider, +.uk-card-secondary.uk-card-body .uk-heading-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-divider, +.uk-overlay-primary .uk-heading-divider, +.uk-offcanvas-bar .uk-heading-divider { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-heading-bullet::before, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before, +.uk-card-primary.uk-card-body .uk-heading-bullet::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-bullet::before, +.uk-card-secondary.uk-card-body .uk-heading-bullet::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-bullet::before, +.uk-overlay-primary .uk-heading-bullet::before, +.uk-offcanvas-bar .uk-heading-bullet::before { + border-left-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-heading-line > ::before, +.uk-light .uk-heading-line > ::after, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-section-primary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line > ::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line > ::after, +.uk-card-primary.uk-card-body .uk-heading-line > ::before, +.uk-card-primary.uk-card-body .uk-heading-line > ::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-line > ::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-heading-line > ::after, +.uk-card-secondary.uk-card-body .uk-heading-line > ::before, +.uk-card-secondary.uk-card-body .uk-heading-line > ::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-line > ::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-heading-line > ::after, +.uk-overlay-primary .uk-heading-line > ::before, +.uk-overlay-primary .uk-heading-line > ::after, +.uk-offcanvas-bar .uk-heading-line > ::before, +.uk-offcanvas-bar .uk-heading-line > ::after { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon, +.uk-card-primary.uk-card-body .uk-divider-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon, +.uk-card-secondary.uk-card-body .uk-divider-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon, +.uk-overlay-primary .uk-divider-icon, +.uk-offcanvas-bar .uk-divider-icon { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-divider-icon::before, +.uk-light .uk-divider-icon::after, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after, +.uk-card-primary.uk-card-body .uk-divider-icon::before, +.uk-card-primary.uk-card-body .uk-divider-icon::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-icon::after, +.uk-card-secondary.uk-card-body .uk-divider-icon::before, +.uk-card-secondary.uk-card-body .uk-divider-icon::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-icon::after, +.uk-overlay-primary .uk-divider-icon::before, +.uk-overlay-primary .uk-divider-icon::after, +.uk-offcanvas-bar .uk-divider-icon::before, +.uk-offcanvas-bar .uk-divider-icon::after { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-small::after, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after, +.uk-card-primary.uk-card-body .uk-divider-small::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-small::after, +.uk-card-secondary.uk-card-body .uk-divider-small::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-small::after, +.uk-overlay-primary .uk-divider-small::after, +.uk-offcanvas-bar .uk-divider-small::after { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-divider-vertical, +.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical, +.uk-card-primary.uk-card-body .uk-divider-vertical, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-divider-vertical, +.uk-card-secondary.uk-card-body .uk-divider-vertical, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-divider-vertical, +.uk-overlay-primary .uk-divider-vertical, +.uk-offcanvas-bar .uk-divider-vertical { + border-left-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-muted > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted > ::marker, +.uk-card-primary.uk-card-body .uk-list-muted > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-muted > ::marker, +.uk-card-secondary.uk-card-body .uk-list-muted > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-muted > ::marker, +.uk-overlay-primary .uk-list-muted > ::marker, +.uk-offcanvas-bar .uk-list-muted > ::marker { + color: rgba(255, 255, 255, 0.5) !important; +} +.uk-light .uk-list-emphasis > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis > ::marker, +.uk-card-primary.uk-card-body .uk-list-emphasis > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-emphasis > ::marker, +.uk-card-secondary.uk-card-body .uk-list-emphasis > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-emphasis > ::marker, +.uk-overlay-primary .uk-list-emphasis > ::marker, +.uk-offcanvas-bar .uk-list-emphasis > ::marker { + color: #fff !important; +} +.uk-light .uk-list-primary > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary > ::marker, +.uk-card-primary.uk-card-body .uk-list-primary > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-primary > ::marker, +.uk-card-secondary.uk-card-body .uk-list-primary > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-primary > ::marker, +.uk-overlay-primary .uk-list-primary > ::marker, +.uk-offcanvas-bar .uk-list-primary > ::marker { + color: #fff !important; +} +.uk-light .uk-list-secondary > ::marker, +.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary > ::marker, +.uk-card-primary.uk-card-body .uk-list-secondary > ::marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-secondary > ::marker, +.uk-card-secondary.uk-card-body .uk-list-secondary > ::marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-secondary > ::marker, +.uk-overlay-primary .uk-list-secondary > ::marker, +.uk-offcanvas-bar .uk-list-secondary > ::marker { + color: #fff !important; +} +.uk-light .uk-list-bullet > ::before, +.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet > ::before, +.uk-card-primary.uk-card-body .uk-list-bullet > ::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-bullet > ::before, +.uk-card-secondary.uk-card-body .uk-list-bullet > ::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-bullet > ::before, +.uk-overlay-primary .uk-list-bullet > ::before, +.uk-offcanvas-bar .uk-list-bullet > ::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-list-divider > :nth-child(n+2), +.uk-section-primary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider > :nth-child(n+2), +.uk-card-primary.uk-card-body .uk-list-divider > :nth-child(n+2), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-divider > :nth-child(n+2), +.uk-card-secondary.uk-card-body .uk-list-divider > :nth-child(n+2), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-divider > :nth-child(n+2), +.uk-overlay-primary .uk-list-divider > :nth-child(n+2), +.uk-offcanvas-bar .uk-list-divider > :nth-child(n+2) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-striped > *:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped > *:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-list-striped > *:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-striped > *:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-list-striped > *:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-striped > *:nth-of-type(odd), +.uk-overlay-primary .uk-list-striped > *:nth-of-type(odd), +.uk-offcanvas-bar .uk-list-striped > *:nth-of-type(odd) { + border-top-color: rgba(255, 255, 255, 0.2); + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-list-striped > :nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped > :nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-list-striped > :nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-list-striped > :nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-list-striped > :nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-list-striped > :nth-of-type(odd), +.uk-overlay-primary .uk-list-striped > :nth-of-type(odd), +.uk-offcanvas-bar .uk-list-striped > :nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-table th, +.uk-section-primary:not(.uk-preserve-color) .uk-table th, +.uk-section-secondary:not(.uk-preserve-color) .uk-table th, +.uk-tile-primary:not(.uk-preserve-color) .uk-table th, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table th, +.uk-card-primary.uk-card-body .uk-table th, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table th, +.uk-card-secondary.uk-card-body .uk-table th, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table th, +.uk-overlay-primary .uk-table th, +.uk-offcanvas-bar .uk-table th { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-table caption, +.uk-section-primary:not(.uk-preserve-color) .uk-table caption, +.uk-section-secondary:not(.uk-preserve-color) .uk-table caption, +.uk-tile-primary:not(.uk-preserve-color) .uk-table caption, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption, +.uk-card-primary.uk-card-body .uk-table caption, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table caption, +.uk-card-secondary.uk-card-body .uk-table caption, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table caption, +.uk-overlay-primary .uk-table caption, +.uk-offcanvas-bar .uk-table caption { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-table > tr.uk-active, +.uk-light .uk-table tbody tr.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table > tr.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active, +.uk-card-primary.uk-card-body .uk-table > tr.uk-active, +.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table > tr.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table tbody tr.uk-active, +.uk-card-secondary.uk-card-body .uk-table > tr.uk-active, +.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table > tr.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table tbody tr.uk-active, +.uk-overlay-primary .uk-table > tr.uk-active, +.uk-overlay-primary .uk-table tbody tr.uk-active, +.uk-offcanvas-bar .uk-table > tr.uk-active, +.uk-offcanvas-bar .uk-table tbody tr.uk-active { + background: rgba(255, 255, 255, 0.08); +} +.uk-light .uk-table-divider > tr:not(:first-child), +.uk-light .uk-table-divider > :not(:first-child) > tr, +.uk-light .uk-table-divider > :first-child > tr:not(:first-child), +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-section-primary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > tr:not(:first-child), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > :not(:first-child) > tr, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-primary.uk-card-body .uk-table-divider > tr:not(:first-child), +.uk-card-primary.uk-card-body .uk-table-divider > :not(:first-child) > tr, +.uk-card-primary.uk-card-body .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > tr:not(:first-child), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > :not(:first-child) > tr, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-secondary.uk-card-body .uk-table-divider > tr:not(:first-child), +.uk-card-secondary.uk-card-body .uk-table-divider > :not(:first-child) > tr, +.uk-card-secondary.uk-card-body .uk-table-divider > :first-child > tr:not(:first-child), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > tr:not(:first-child), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > :not(:first-child) > tr, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-divider > :first-child > tr:not(:first-child), +.uk-overlay-primary .uk-table-divider > tr:not(:first-child), +.uk-overlay-primary .uk-table-divider > :not(:first-child) > tr, +.uk-overlay-primary .uk-table-divider > :first-child > tr:not(:first-child), +.uk-offcanvas-bar .uk-table-divider > tr:not(:first-child), +.uk-offcanvas-bar .uk-table-divider > :not(:first-child) > tr, +.uk-offcanvas-bar .uk-table-divider > :first-child > tr:not(:first-child) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-table-striped > tr:nth-of-type(odd), +.uk-light .uk-table-striped tbody tr:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(odd), +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-table-striped > tr:nth-of-type(odd), +.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(odd), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-table-striped > tr:nth-of-type(odd), +.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(odd), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(odd), +.uk-overlay-primary .uk-table-striped > tr:nth-of-type(odd), +.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd), +.uk-offcanvas-bar .uk-table-striped > tr:nth-of-type(odd), +.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd) { + background: rgba(255, 255, 255, 0.1); + border-top-color: rgba(255, 255, 255, 0.2); + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-table-hover > tr:hover, +.uk-light .uk-table-hover tbody tr:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover > tr:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover, +.uk-card-primary.uk-card-body .uk-table-hover > tr:hover, +.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-hover > tr:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-hover tbody tr:hover, +.uk-card-secondary.uk-card-body .uk-table-hover > tr:hover, +.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-hover > tr:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-hover tbody tr:hover, +.uk-overlay-primary .uk-table-hover > tr:hover, +.uk-overlay-primary .uk-table-hover tbody tr:hover, +.uk-offcanvas-bar .uk-table-hover > tr:hover, +.uk-offcanvas-bar .uk-table-hover tbody tr:hover { + background: rgba(255, 255, 255, 0.08); +} +.uk-light .uk-icon-link, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link, +.uk-card-primary.uk-card-body .uk-icon-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link, +.uk-card-secondary.uk-card-body .uk-icon-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link, +.uk-overlay-primary .uk-icon-link, +.uk-offcanvas-bar .uk-icon-link { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-icon-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover, +.uk-card-primary.uk-card-body .uk-icon-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link:hover, +.uk-card-secondary.uk-card-body .uk-icon-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link:hover, +.uk-overlay-primary .uk-icon-link:hover, +.uk-offcanvas-bar .uk-icon-link:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-link:active, +.uk-light .uk-active > .uk-icon-link, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-section-primary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-active > .uk-icon-link, +.uk-card-primary.uk-card-body .uk-icon-link:active, +.uk-card-primary.uk-card-body .uk-active > .uk-icon-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-link:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-active > .uk-icon-link, +.uk-card-secondary.uk-card-body .uk-icon-link:active, +.uk-card-secondary.uk-card-body .uk-active > .uk-icon-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-link:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-active > .uk-icon-link, +.uk-overlay-primary .uk-icon-link:active, +.uk-overlay-primary .uk-active > .uk-icon-link, +.uk-offcanvas-bar .uk-icon-link:active, +.uk-offcanvas-bar .uk-active > .uk-icon-link { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-button, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button, +.uk-card-primary.uk-card-body .uk-icon-button, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button, +.uk-card-secondary.uk-card-body .uk-icon-button, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button, +.uk-overlay-primary .uk-icon-button, +.uk-offcanvas-bar .uk-icon-button { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-icon-button:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover, +.uk-card-primary.uk-card-body .uk-icon-button:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button:hover, +.uk-card-secondary.uk-card-body .uk-icon-button:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button:hover, +.uk-overlay-primary .uk-icon-button:hover, +.uk-offcanvas-bar .uk-icon-button:hover { + background-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-icon-button:active, +.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active, +.uk-card-primary.uk-card-body .uk-icon-button:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-icon-button:active, +.uk-card-secondary.uk-card-body .uk-icon-button:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-icon-button:active, +.uk-overlay-primary .uk-icon-button:active, +.uk-offcanvas-bar .uk-icon-button:active { + background-color: rgba(255, 255, 255, 0.2); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-range::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range::-webkit-slider-runnable-track { + background: rgba(242, 242, 242, 0.1); +} +.uk-light .uk-range:focus::-webkit-slider-runnable-track, +.uk-light .uk-range:active::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-primary.uk-card-body .uk-range:active::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:active::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-secondary.uk-card-body .uk-range:active::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:focus::-webkit-slider-runnable-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:active::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range:focus::-webkit-slider-runnable-track, +.uk-overlay-primary .uk-range:active::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range:focus::-webkit-slider-runnable-track, +.uk-offcanvas-bar .uk-range:active::-webkit-slider-runnable-track { + background: rgba(242, 242, 242, 0.15); +} +.uk-light .uk-range::-moz-range-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track, +.uk-card-primary.uk-card-body .uk-range::-moz-range-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-moz-range-track, +.uk-card-secondary.uk-card-body .uk-range::-moz-range-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-moz-range-track, +.uk-overlay-primary .uk-range::-moz-range-track, +.uk-offcanvas-bar .uk-range::-moz-range-track { + background: rgba(242, 242, 242, 0.1); +} +.uk-light .uk-range:focus::-moz-range-track, +.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track, +.uk-card-primary.uk-card-body .uk-range:focus::-moz-range-track, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range:focus::-moz-range-track, +.uk-card-secondary.uk-card-body .uk-range:focus::-moz-range-track, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range:focus::-moz-range-track, +.uk-overlay-primary .uk-range:focus::-moz-range-track, +.uk-offcanvas-bar .uk-range:focus::-moz-range-track { + background: rgba(242, 242, 242, 0.15); +} +.uk-light .uk-range::-webkit-slider-thumb, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb, +.uk-card-primary.uk-card-body .uk-range::-webkit-slider-thumb, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-thumb, +.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-thumb, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-webkit-slider-thumb, +.uk-overlay-primary .uk-range::-webkit-slider-thumb, +.uk-offcanvas-bar .uk-range::-webkit-slider-thumb { + background: #808080; + border-color: #e6e6e6; +} +.uk-light .uk-range::-moz-range-thumb, +.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb, +.uk-card-primary.uk-card-body .uk-range::-moz-range-thumb, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-range::-moz-range-thumb, +.uk-card-secondary.uk-card-body .uk-range::-moz-range-thumb, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-range::-moz-range-thumb, +.uk-overlay-primary .uk-range::-moz-range-thumb, +.uk-offcanvas-bar .uk-range::-moz-range-thumb { + background: #808080; + border-color: #e6e6e6; +} +.uk-light .uk-input, +.uk-light .uk-select, +.uk-light .uk-textarea, +.uk-section-primary:not(.uk-preserve-color) .uk-input, +.uk-section-primary:not(.uk-preserve-color) .uk-select, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea, +.uk-section-secondary:not(.uk-preserve-color) .uk-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-select, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea, +.uk-tile-primary:not(.uk-preserve-color) .uk-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-select, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-select, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea, +.uk-card-primary.uk-card-body .uk-input, +.uk-card-primary.uk-card-body .uk-select, +.uk-card-primary.uk-card-body .uk-textarea, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea, +.uk-card-secondary.uk-card-body .uk-input, +.uk-card-secondary.uk-card-body .uk-select, +.uk-card-secondary.uk-card-body .uk-textarea, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea, +.uk-overlay-primary .uk-input, +.uk-overlay-primary .uk-select, +.uk-overlay-primary .uk-textarea, +.uk-offcanvas-bar .uk-input, +.uk-offcanvas-bar .uk-select, +.uk-offcanvas-bar .uk-textarea { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); + background-clip: padding-box; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-input:focus, +.uk-light .uk-select:focus, +.uk-light .uk-textarea:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-select:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus, +.uk-card-primary.uk-card-body .uk-input:focus, +.uk-card-primary.uk-card-body .uk-select:focus, +.uk-card-primary.uk-card-body .uk-textarea:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea:focus, +.uk-card-secondary.uk-card-body .uk-input:focus, +.uk-card-secondary.uk-card-body .uk-select:focus, +.uk-card-secondary.uk-card-body .uk-textarea:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea:focus, +.uk-overlay-primary .uk-input:focus, +.uk-overlay-primary .uk-select:focus, +.uk-overlay-primary .uk-textarea:focus, +.uk-offcanvas-bar .uk-input:focus, +.uk-offcanvas-bar .uk-select:focus, +.uk-offcanvas-bar .uk-textarea:focus { + background-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.7); + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-input::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder, +.uk-card-primary.uk-card-body .uk-input::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input::placeholder, +.uk-card-secondary.uk-card-body .uk-input::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input::placeholder, +.uk-overlay-primary .uk-input::placeholder, +.uk-offcanvas-bar .uk-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-textarea::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder, +.uk-card-primary.uk-card-body .uk-textarea::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-textarea::placeholder, +.uk-card-secondary.uk-card-body .uk-textarea::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-textarea::placeholder, +.uk-overlay-primary .uk-textarea::placeholder, +.uk-offcanvas-bar .uk-textarea::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-select:not([multiple]):not([size]), +.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]), +.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-select:not([multiple]):not([size]), +.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-select:not([multiple]):not([size]), +.uk-overlay-primary .uk-select:not([multiple]):not([size]), +.uk-offcanvas-bar .uk-select:not([multiple]):not([size]) { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-input[list]:hover, +.uk-light .uk-input[list]:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus, +.uk-card-primary.uk-card-body .uk-input[list]:hover, +.uk-card-primary.uk-card-body .uk-input[list]:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input[list]:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-input[list]:focus, +.uk-card-secondary.uk-card-body .uk-input[list]:hover, +.uk-card-secondary.uk-card-body .uk-input[list]:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input[list]:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-input[list]:focus, +.uk-overlay-primary .uk-input[list]:hover, +.uk-overlay-primary .uk-input[list]:focus, +.uk-offcanvas-bar .uk-input[list]:hover, +.uk-offcanvas-bar .uk-input[list]:focus { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-radio, +.uk-light .uk-checkbox, +.uk-section-primary:not(.uk-preserve-color) .uk-radio, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox, +.uk-card-primary.uk-card-body .uk-radio, +.uk-card-primary.uk-card-body .uk-checkbox, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox, +.uk-card-secondary.uk-card-body .uk-radio, +.uk-card-secondary.uk-card-body .uk-checkbox, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox, +.uk-overlay-primary .uk-radio, +.uk-overlay-primary .uk-checkbox, +.uk-offcanvas-bar .uk-radio, +.uk-offcanvas-bar .uk-checkbox { + background-color: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-radio:focus, +.uk-light .uk-checkbox:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus, +.uk-card-primary.uk-card-body .uk-radio:focus, +.uk-card-primary.uk-card-body .uk-checkbox:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:focus, +.uk-card-secondary.uk-card-body .uk-radio:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:focus, +.uk-overlay-primary .uk-radio:focus, +.uk-overlay-primary .uk-checkbox:focus, +.uk-offcanvas-bar .uk-radio:focus, +.uk-offcanvas-bar .uk-checkbox:focus { + background-color: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-radio:checked, +.uk-light .uk-checkbox:checked, +.uk-light .uk-checkbox:indeterminate, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-card-primary.uk-card-body .uk-radio:checked, +.uk-card-primary.uk-card-body .uk-checkbox:checked, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-card-secondary.uk-card-body .uk-radio:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-overlay-primary .uk-radio:checked, +.uk-overlay-primary .uk-checkbox:checked, +.uk-overlay-primary .uk-checkbox:indeterminate, +.uk-offcanvas-bar .uk-radio:checked, +.uk-offcanvas-bar .uk-checkbox:checked, +.uk-offcanvas-bar .uk-checkbox:indeterminate { + background-color: #fff; + border-color: #fff; +} +.uk-light .uk-radio:checked:focus, +.uk-light .uk-checkbox:checked:focus, +.uk-light .uk-checkbox:indeterminate:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus, +.uk-card-primary.uk-card-body .uk-radio:checked:focus, +.uk-card-primary.uk-card-body .uk-checkbox:checked:focus, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate:focus, +.uk-card-secondary.uk-card-body .uk-radio:checked:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate:focus, +.uk-overlay-primary .uk-radio:checked:focus, +.uk-overlay-primary .uk-checkbox:checked:focus, +.uk-overlay-primary .uk-checkbox:indeterminate:focus, +.uk-offcanvas-bar .uk-radio:checked:focus, +.uk-offcanvas-bar .uk-checkbox:checked:focus, +.uk-offcanvas-bar .uk-checkbox:indeterminate:focus { + background-color: #ffffff; +} +.uk-light .uk-radio:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked, +.uk-card-primary.uk-card-body .uk-radio:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-card-secondary.uk-card-body .uk-radio:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-radio:checked, +.uk-overlay-primary .uk-radio:checked, +.uk-offcanvas-bar .uk-radio:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-checkbox:checked, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked, +.uk-card-primary.uk-card-body .uk-checkbox:checked, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-card-secondary.uk-card-body .uk-checkbox:checked, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:checked, +.uk-overlay-primary .uk-checkbox:checked, +.uk-offcanvas-bar .uk-checkbox:checked { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +.uk-light .uk-checkbox:indeterminate, +.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate, +.uk-card-primary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-checkbox:indeterminate, +.uk-overlay-primary .uk-checkbox:indeterminate, +.uk-offcanvas-bar .uk-checkbox:indeterminate { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-form-label, +.uk-section-primary:not(.uk-preserve-color) .uk-form-label, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-label, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-label, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label, +.uk-card-primary.uk-card-body .uk-form-label, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-label, +.uk-card-secondary.uk-card-body .uk-form-label, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-label, +.uk-overlay-primary .uk-form-label, +.uk-offcanvas-bar .uk-form-label { + color: #fff; +} +.uk-light .uk-form-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-form-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon, +.uk-card-primary.uk-card-body .uk-form-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-icon, +.uk-card-secondary.uk-card-body .uk-form-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-icon, +.uk-overlay-primary .uk-form-icon, +.uk-offcanvas-bar .uk-form-icon { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-form-icon:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover, +.uk-card-primary.uk-card-body .uk-form-icon:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-form-icon:hover, +.uk-card-secondary.uk-card-body .uk-form-icon:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-form-icon:hover, +.uk-overlay-primary .uk-form-icon:hover, +.uk-offcanvas-bar .uk-form-icon:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-button-default, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default, +.uk-card-primary.uk-card-body .uk-button-default, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default, +.uk-card-secondary.uk-card-body .uk-button-default, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default, +.uk-overlay-primary .uk-button-default, +.uk-offcanvas-bar .uk-button-default { + background-color: transparent; + color: #fff; + border-color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-button-default:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover, +.uk-card-primary.uk-card-body .uk-button-default:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default:hover, +.uk-card-secondary.uk-card-body .uk-button-default:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default:hover, +.uk-overlay-primary .uk-button-default:hover, +.uk-offcanvas-bar .uk-button-default:hover { + background-color: transparent; + color: #fff; + border-color: #fff; +} +.uk-light .uk-button-default:active, +.uk-light .uk-button-default.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active, +.uk-card-primary.uk-card-body .uk-button-default:active, +.uk-card-primary.uk-card-body .uk-button-default.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-default.uk-active, +.uk-card-secondary.uk-card-body .uk-button-default:active, +.uk-card-secondary.uk-card-body .uk-button-default.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-default.uk-active, +.uk-overlay-primary .uk-button-default:active, +.uk-overlay-primary .uk-button-default.uk-active, +.uk-offcanvas-bar .uk-button-default:active, +.uk-offcanvas-bar .uk-button-default.uk-active { + background-color: transparent; + color: #fff; + border-color: #fff; +} +.uk-light .uk-button-primary, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary, +.uk-card-primary.uk-card-body .uk-button-primary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary, +.uk-card-secondary.uk-card-body .uk-button-primary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary, +.uk-overlay-primary .uk-button-primary, +.uk-offcanvas-bar .uk-button-primary { + background-color: #fff; + color: #666; +} +.uk-light .uk-button-primary:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover, +.uk-card-primary.uk-card-body .uk-button-primary:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary:hover, +.uk-card-secondary.uk-card-body .uk-button-primary:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary:hover, +.uk-overlay-primary .uk-button-primary:hover, +.uk-offcanvas-bar .uk-button-primary:hover { + background-color: #f2f2f2; + color: #666; +} +.uk-light .uk-button-primary:active, +.uk-light .uk-button-primary.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active, +.uk-card-primary.uk-card-body .uk-button-primary:active, +.uk-card-primary.uk-card-body .uk-button-primary.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-primary.uk-active, +.uk-card-secondary.uk-card-body .uk-button-primary:active, +.uk-card-secondary.uk-card-body .uk-button-primary.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-primary.uk-active, +.uk-overlay-primary .uk-button-primary:active, +.uk-overlay-primary .uk-button-primary.uk-active, +.uk-offcanvas-bar .uk-button-primary:active, +.uk-offcanvas-bar .uk-button-primary.uk-active { + background-color: #e6e6e6; + color: #666; +} +.uk-light .uk-button-secondary, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary, +.uk-card-primary.uk-card-body .uk-button-secondary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary, +.uk-card-secondary.uk-card-body .uk-button-secondary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary, +.uk-overlay-primary .uk-button-secondary, +.uk-offcanvas-bar .uk-button-secondary { + background-color: #fff; + color: #666; +} +.uk-light .uk-button-secondary:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover, +.uk-card-primary.uk-card-body .uk-button-secondary:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary:hover, +.uk-card-secondary.uk-card-body .uk-button-secondary:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary:hover, +.uk-overlay-primary .uk-button-secondary:hover, +.uk-offcanvas-bar .uk-button-secondary:hover { + background-color: #f2f2f2; + color: #666; +} +.uk-light .uk-button-secondary:active, +.uk-light .uk-button-secondary.uk-active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active, +.uk-card-primary.uk-card-body .uk-button-secondary:active, +.uk-card-primary.uk-card-body .uk-button-secondary.uk-active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-secondary.uk-active, +.uk-card-secondary.uk-card-body .uk-button-secondary:active, +.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-secondary.uk-active, +.uk-overlay-primary .uk-button-secondary:active, +.uk-overlay-primary .uk-button-secondary.uk-active, +.uk-offcanvas-bar .uk-button-secondary:active, +.uk-offcanvas-bar .uk-button-secondary.uk-active { + background-color: #e6e6e6; + color: #666; +} +.uk-light .uk-button-text, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text, +.uk-card-primary.uk-card-body .uk-button-text, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text, +.uk-card-secondary.uk-card-body .uk-button-text, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text, +.uk-overlay-primary .uk-button-text, +.uk-offcanvas-bar .uk-button-text { + color: #fff; +} +.uk-light .uk-button-text::before, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before, +.uk-card-primary.uk-card-body .uk-button-text::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text::before, +.uk-card-secondary.uk-card-body .uk-button-text::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text::before, +.uk-overlay-primary .uk-button-text::before, +.uk-offcanvas-bar .uk-button-text::before { + border-bottom-color: #fff; +} +.uk-light .uk-button-text:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover, +.uk-card-primary.uk-card-body .uk-button-text:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text:hover, +.uk-card-secondary.uk-card-body .uk-button-text:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text:hover, +.uk-overlay-primary .uk-button-text:hover, +.uk-offcanvas-bar .uk-button-text:hover { + color: #fff; +} +.uk-light .uk-button-text:disabled, +.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled, +.uk-card-primary.uk-card-body .uk-button-text:disabled, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-text:disabled, +.uk-card-secondary.uk-card-body .uk-button-text:disabled, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-text:disabled, +.uk-overlay-primary .uk-button-text:disabled, +.uk-offcanvas-bar .uk-button-text:disabled { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-button-link, +.uk-section-primary:not(.uk-preserve-color) .uk-button-link, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-link, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-link, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link, +.uk-card-primary.uk-card-body .uk-button-link, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-link, +.uk-card-secondary.uk-card-body .uk-button-link, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-link, +.uk-overlay-primary .uk-button-link, +.uk-offcanvas-bar .uk-button-link { + color: #fff; +} +.uk-light .uk-button-link:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover, +.uk-card-primary.uk-card-body .uk-button-link:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-button-link:hover, +.uk-card-secondary.uk-card-body .uk-button-link:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-button-link:hover, +.uk-overlay-primary .uk-button-link:hover, +.uk-offcanvas-bar .uk-button-link:hover { + color: rgba(255, 255, 255, 0.5); +} +.uk-light.uk-card-badge, +.uk-section-primary:not(.uk-preserve-color).uk-card-badge, +.uk-section-secondary:not(.uk-preserve-color).uk-card-badge, +.uk-tile-primary:not(.uk-preserve-color).uk-card-badge, +.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge, +.uk-card-primary.uk-card-body.uk-card-badge, +.uk-card-primary > :not([class*="uk-card-media"]).uk-card-badge, +.uk-card-secondary.uk-card-body.uk-card-badge, +.uk-card-secondary > :not([class*="uk-card-media"]).uk-card-badge, +.uk-overlay-primary.uk-card-badge, +.uk-offcanvas-bar.uk-card-badge { + background-color: #fff; + color: #666; +} +.uk-light .uk-close, +.uk-section-primary:not(.uk-preserve-color) .uk-close, +.uk-section-secondary:not(.uk-preserve-color) .uk-close, +.uk-tile-primary:not(.uk-preserve-color) .uk-close, +.uk-tile-secondary:not(.uk-preserve-color) .uk-close, +.uk-card-primary.uk-card-body .uk-close, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-close, +.uk-card-secondary.uk-card-body .uk-close, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-close, +.uk-overlay-primary .uk-close, +.uk-offcanvas-bar .uk-close { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-close:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-close:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover, +.uk-card-primary.uk-card-body .uk-close:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-close:hover, +.uk-card-secondary.uk-card-body .uk-close:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-close:hover, +.uk-overlay-primary .uk-close:hover, +.uk-offcanvas-bar .uk-close:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-totop, +.uk-section-primary:not(.uk-preserve-color) .uk-totop, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop, +.uk-card-primary.uk-card-body .uk-totop, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop, +.uk-card-secondary.uk-card-body .uk-totop, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop, +.uk-overlay-primary .uk-totop, +.uk-offcanvas-bar .uk-totop { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-totop:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover, +.uk-card-primary.uk-card-body .uk-totop:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop:hover, +.uk-card-secondary.uk-card-body .uk-totop:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop:hover, +.uk-overlay-primary .uk-totop:hover, +.uk-offcanvas-bar .uk-totop:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-totop:active, +.uk-section-primary:not(.uk-preserve-color) .uk-totop:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active, +.uk-card-primary.uk-card-body .uk-totop:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-totop:active, +.uk-card-secondary.uk-card-body .uk-totop:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-totop:active, +.uk-overlay-primary .uk-totop:active, +.uk-offcanvas-bar .uk-totop:active { + color: #fff; +} +.uk-light .uk-marker, +.uk-section-primary:not(.uk-preserve-color) .uk-marker, +.uk-section-secondary:not(.uk-preserve-color) .uk-marker, +.uk-tile-primary:not(.uk-preserve-color) .uk-marker, +.uk-tile-secondary:not(.uk-preserve-color) .uk-marker, +.uk-card-primary.uk-card-body .uk-marker, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-marker, +.uk-card-secondary.uk-card-body .uk-marker, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-marker, +.uk-overlay-primary .uk-marker, +.uk-offcanvas-bar .uk-marker { + background: #f8f8f8; + color: #666; +} +.uk-light .uk-marker:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover, +.uk-card-primary.uk-card-body .uk-marker:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-marker:hover, +.uk-card-secondary.uk-card-body .uk-marker:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-marker:hover, +.uk-overlay-primary .uk-marker:hover, +.uk-offcanvas-bar .uk-marker:hover { + color: #666; +} +.uk-light .uk-badge, +.uk-section-primary:not(.uk-preserve-color) .uk-badge, +.uk-section-secondary:not(.uk-preserve-color) .uk-badge, +.uk-tile-primary:not(.uk-preserve-color) .uk-badge, +.uk-tile-secondary:not(.uk-preserve-color) .uk-badge, +.uk-card-primary.uk-card-body .uk-badge, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-badge, +.uk-card-secondary.uk-card-body .uk-badge, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-badge, +.uk-overlay-primary .uk-badge, +.uk-offcanvas-bar .uk-badge { + background-color: #fff; + color: #666 !important; +} +.uk-light .uk-label, +.uk-section-primary:not(.uk-preserve-color) .uk-label, +.uk-section-secondary:not(.uk-preserve-color) .uk-label, +.uk-tile-primary:not(.uk-preserve-color) .uk-label, +.uk-tile-secondary:not(.uk-preserve-color) .uk-label, +.uk-card-primary.uk-card-body .uk-label, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-label, +.uk-card-secondary.uk-card-body .uk-label, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-label, +.uk-overlay-primary .uk-label, +.uk-offcanvas-bar .uk-label { + background-color: #fff; + color: #666; +} +.uk-light .uk-article-meta, +.uk-section-primary:not(.uk-preserve-color) .uk-article-meta, +.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta, +.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta, +.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta, +.uk-card-primary.uk-card-body .uk-article-meta, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-article-meta, +.uk-card-secondary.uk-card-body .uk-article-meta, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-article-meta, +.uk-overlay-primary .uk-article-meta, +.uk-offcanvas-bar .uk-article-meta { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-input, +.uk-overlay-primary .uk-search-input, +.uk-offcanvas-bar .uk-search-input { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-search-input::placeholder, +.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder, +.uk-card-primary.uk-card-body .uk-search-input::placeholder, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-input::placeholder, +.uk-card-secondary.uk-card-body .uk-search-input::placeholder, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-input::placeholder, +.uk-overlay-primary .uk-search-input::placeholder, +.uk-offcanvas-bar .uk-search-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search .uk-search-icon, +.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon, +.uk-card-primary.uk-card-body .uk-search .uk-search-icon, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon, +.uk-card-secondary.uk-card-body .uk-search .uk-search-icon, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon, +.uk-overlay-primary .uk-search .uk-search-icon, +.uk-offcanvas-bar .uk-search .uk-search-icon { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search .uk-search-icon:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover, +.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon:hover, +.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search .uk-search-icon:hover, +.uk-overlay-primary .uk-search .uk-search-icon:hover, +.uk-offcanvas-bar .uk-search .uk-search-icon:hover { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-default .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-default .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input, +.uk-overlay-primary .uk-search-default .uk-search-input, +.uk-offcanvas-bar .uk-search-default .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-default .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-default .uk-search-input:focus, +.uk-overlay-primary .uk-search-default .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-default .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-navbar .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input, +.uk-overlay-primary .uk-search-navbar .uk-search-input, +.uk-offcanvas-bar .uk-search-navbar .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-navbar .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-navbar .uk-search-input:focus, +.uk-overlay-primary .uk-search-navbar .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-navbar .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-medium .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input, +.uk-overlay-primary .uk-search-medium .uk-search-input, +.uk-offcanvas-bar .uk-search-medium .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-medium .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-medium .uk-search-input:focus, +.uk-overlay-primary .uk-search-medium .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-medium .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-large .uk-search-input, +.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input, +.uk-card-primary.uk-card-body .uk-search-large .uk-search-input, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input, +.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input, +.uk-overlay-primary .uk-search-large .uk-search-input, +.uk-offcanvas-bar .uk-search-large .uk-search-input { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-search-large .uk-search-input:focus, +.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus, +.uk-card-primary.uk-card-body .uk-search-large .uk-search-input:focus, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input:focus, +.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input:focus, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-large .uk-search-input:focus, +.uk-overlay-primary .uk-search-large .uk-search-input:focus, +.uk-offcanvas-bar .uk-search-large .uk-search-input:focus { + background-color: rgba(0, 0, 0, 0.05); +} +.uk-light .uk-search-toggle, +.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle, +.uk-card-primary.uk-card-body .uk-search-toggle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-toggle, +.uk-card-secondary.uk-card-body .uk-search-toggle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-toggle, +.uk-overlay-primary .uk-search-toggle, +.uk-offcanvas-bar .uk-search-toggle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-search-toggle:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover, +.uk-card-primary.uk-card-body .uk-search-toggle:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-search-toggle:hover, +.uk-card-secondary.uk-card-body .uk-search-toggle:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-search-toggle:hover, +.uk-overlay-primary .uk-search-toggle:hover, +.uk-offcanvas-bar .uk-search-toggle:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-accordion-title, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title, +.uk-card-primary.uk-card-body .uk-accordion-title, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title, +.uk-card-secondary.uk-card-body .uk-accordion-title, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title, +.uk-overlay-primary .uk-accordion-title, +.uk-offcanvas-bar .uk-accordion-title { + color: #fff; +} +.uk-light .uk-accordion-title:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover, +.uk-card-primary.uk-card-body .uk-accordion-title:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title:hover, +.uk-card-secondary.uk-card-body .uk-accordion-title:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title:hover, +.uk-overlay-primary .uk-accordion-title:hover, +.uk-offcanvas-bar .uk-accordion-title:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-thumbnav > * > *::after, +.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav > * > *::after, +.uk-card-primary.uk-card-body .uk-thumbnav > * > *::after, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-thumbnav > * > *::after, +.uk-card-secondary.uk-card-body .uk-thumbnav > * > *::after, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-thumbnav > * > *::after, +.uk-overlay-primary .uk-thumbnav > * > *::after, +.uk-offcanvas-bar .uk-thumbnav > * > *::after { + background-image: linear-gradient(180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.4)); +} +.uk-light .uk-iconnav > * > a, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > * > a, +.uk-card-primary.uk-card-body .uk-iconnav > * > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > * > a, +.uk-card-secondary.uk-card-body .uk-iconnav > * > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > * > a, +.uk-overlay-primary .uk-iconnav > * > a, +.uk-offcanvas-bar .uk-iconnav > * > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-iconnav > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > * > a:hover, +.uk-card-primary.uk-card-body .uk-iconnav > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > * > a:hover, +.uk-card-secondary.uk-card-body .uk-iconnav > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > * > a:hover, +.uk-overlay-primary .uk-iconnav > * > a:hover, +.uk-offcanvas-bar .uk-iconnav > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-iconnav > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav > .uk-active > a, +.uk-card-primary.uk-card-body .uk-iconnav > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-iconnav > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-iconnav > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-iconnav > .uk-active > a, +.uk-overlay-primary .uk-iconnav > .uk-active > a, +.uk-offcanvas-bar .uk-iconnav > .uk-active > a { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-grid-divider > :not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-grid-divider > :not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-grid-divider > :not(.uk-first-column)::before, +.uk-overlay-primary .uk-grid-divider > :not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-grid-divider > :not(.uk-first-column)::before { + border-left-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-overlay-primary .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before, +.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-default > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li > a, +.uk-card-primary.uk-card-body .uk-nav-default > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li > a, +.uk-card-secondary.uk-card-body .uk-nav-default > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li > a, +.uk-overlay-primary .uk-nav-default > li > a, +.uk-offcanvas-bar .uk-nav-default > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-default > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-default > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-default > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li > a:hover, +.uk-overlay-primary .uk-nav-default > li > a:hover, +.uk-offcanvas-bar .uk-nav-default > li > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-default > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-default > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-default > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default > li.uk-active > a, +.uk-overlay-primary .uk-nav-default > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-default > li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-default .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-header, +.uk-overlay-primary .uk-nav-default .uk-nav-header, +.uk-offcanvas-bar .uk-nav-default .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-default .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-divider, +.uk-overlay-primary .uk-nav-default .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-default .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-default .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a, +.uk-overlay-primary .uk-nav-default .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-default .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-primary > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a, +.uk-card-primary.uk-card-body .uk-nav-primary > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a, +.uk-card-secondary.uk-card-body .uk-nav-primary > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a, +.uk-overlay-primary .uk-nav-primary > li > a, +.uk-offcanvas-bar .uk-nav-primary > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-primary > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-primary > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-primary > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li > a:hover, +.uk-overlay-primary .uk-nav-primary > li > a:hover, +.uk-offcanvas-bar .uk-nav-primary > li > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-primary > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-primary > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-primary > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary > li.uk-active > a, +.uk-overlay-primary .uk-nav-primary > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-primary > li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-primary .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-header, +.uk-overlay-primary .uk-nav-primary .uk-nav-header, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-primary .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-divider, +.uk-overlay-primary .uk-nav-primary .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-primary .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-primary .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav-secondary > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a, +.uk-overlay-primary .uk-nav-secondary > li > a, +.uk-offcanvas-bar .uk-nav-secondary > li > a { + color: #fff; +} +.uk-light .uk-nav-secondary > li > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover, +.uk-overlay-primary .uk-nav-secondary > li > a:hover, +.uk-offcanvas-bar .uk-nav-secondary > li > a:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-nav-secondary > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-secondary > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a, +.uk-overlay-primary .uk-nav-secondary > li.uk-active > a, +.uk-offcanvas-bar .uk-nav-secondary > li.uk-active > a { + color: #fff; + background-color: rgba(255, 255, 255, 0.1); +} +.uk-light .uk-nav-secondary .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary > li > a:hover .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary > li > a:hover .uk-nav-subtitle { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-primary.uk-card-body .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-secondary.uk-card-body .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-overlay-primary .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle, +.uk-offcanvas-bar .uk-nav-secondary > li.uk-active > a .uk-nav-subtitle { + color: #fff; +} +.uk-light .uk-nav-secondary .uk-nav-header, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-header, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-header, +.uk-overlay-primary .uk-nav-secondary .uk-nav-header, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header { + color: #fff; +} +.uk-light .uk-nav-secondary .uk-nav-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-divider, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-divider, +.uk-overlay-primary .uk-nav-secondary .uk-nav-divider, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-nav-secondary .uk-nav-sub a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-nav-secondary .uk-nav-sub a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub a:hover, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active > a, +.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active > a { + color: #fff; +} +.uk-light .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-overlay-primary .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider), +.uk-offcanvas-bar .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) { + border-top-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-navbar-nav > li > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a, +.uk-overlay-primary .uk-navbar-nav > li > a, +.uk-offcanvas-bar .uk-navbar-nav > li > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-navbar-nav > li:hover > a, +.uk-light .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-primary.uk-card-body .uk-navbar-nav > li:hover > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li:hover > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-secondary.uk-card-body .uk-navbar-nav > li:hover > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li:hover > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-overlay-primary .uk-navbar-nav > li:hover > a, +.uk-overlay-primary .uk-navbar-nav > li > a[aria-expanded="true"], +.uk-offcanvas-bar .uk-navbar-nav > li:hover > a, +.uk-offcanvas-bar .uk-navbar-nav > li > a[aria-expanded="true"] { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-navbar-nav > li > a:active, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, +.uk-card-primary.uk-card-body .uk-navbar-nav > li > a:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a:active, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li > a:active, +.uk-overlay-primary .uk-navbar-nav > li > a:active, +.uk-offcanvas-bar .uk-navbar-nav > li > a:active { + color: #fff; +} +.uk-light .uk-navbar-nav > li.uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, +.uk-card-primary.uk-card-body .uk-navbar-nav > li.uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-nav > li.uk-active > a, +.uk-card-secondary.uk-card-body .uk-navbar-nav > li.uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-nav > li.uk-active > a, +.uk-overlay-primary .uk-navbar-nav > li.uk-active > a, +.uk-offcanvas-bar .uk-navbar-nav > li.uk-active > a { + color: #fff; +} +.uk-light .uk-navbar-item, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item, +.uk-card-primary.uk-card-body .uk-navbar-item, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-item, +.uk-card-secondary.uk-card-body .uk-navbar-item, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-item, +.uk-overlay-primary .uk-navbar-item, +.uk-offcanvas-bar .uk-navbar-item { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-navbar-toggle, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle, +.uk-card-primary.uk-card-body .uk-navbar-toggle, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle, +.uk-card-secondary.uk-card-body .uk-navbar-toggle, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle, +.uk-overlay-primary .uk-navbar-toggle, +.uk-offcanvas-bar .uk-navbar-toggle { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-navbar-toggle:hover, +.uk-light .uk-navbar-toggle[aria-expanded="true"], +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"], +.uk-card-primary.uk-card-body .uk-navbar-toggle:hover, +.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded="true"], +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-navbar-toggle[aria-expanded="true"], +.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover, +.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded="true"], +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-navbar-toggle[aria-expanded="true"], +.uk-overlay-primary .uk-navbar-toggle:hover, +.uk-overlay-primary .uk-navbar-toggle[aria-expanded="true"], +.uk-offcanvas-bar .uk-navbar-toggle:hover, +.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded="true"] { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav > * > :first-child, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > * > :first-child, +.uk-card-primary.uk-card-body .uk-subnav > * > :first-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > * > :first-child, +.uk-card-secondary.uk-card-body .uk-subnav > * > :first-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > * > :first-child, +.uk-overlay-primary .uk-subnav > * > :first-child, +.uk-offcanvas-bar .uk-subnav > * > :first-child { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-subnav > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > * > a:hover, +.uk-card-primary.uk-card-body .uk-subnav > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > * > a:hover, +.uk-card-secondary.uk-card-body .uk-subnav > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > * > a:hover, +.uk-overlay-primary .uk-subnav > * > a:hover, +.uk-offcanvas-bar .uk-subnav > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > .uk-active > a, +.uk-card-primary.uk-card-body .uk-subnav > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-subnav > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > .uk-active > a, +.uk-overlay-primary .uk-subnav > .uk-active > a, +.uk-offcanvas-bar .uk-subnav > .uk-active > a { + color: #fff; +} +.uk-light .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-overlay-primary .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-subnav-divider > :nth-child(n+2):not(.uk-first-column)::before { + border-left-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-subnav-pill > * > :first-child, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > :first-child, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > :first-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > :first-child, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > :first-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > :first-child, +.uk-overlay-primary .uk-subnav-pill > * > :first-child, +.uk-offcanvas-bar .uk-subnav-pill > * > :first-child { + background-color: transparent; + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-subnav-pill > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:hover, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:hover, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:hover, +.uk-overlay-primary .uk-subnav-pill > * > a:hover, +.uk-offcanvas-bar .uk-subnav-pill > * > a:hover { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav-pill > * > a:active, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > * > a:active, +.uk-card-primary.uk-card-body .uk-subnav-pill > * > a:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:active, +.uk-card-secondary.uk-card-body .uk-subnav-pill > * > a:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > * > a:active, +.uk-overlay-primary .uk-subnav-pill > * > a:active, +.uk-offcanvas-bar .uk-subnav-pill > * > a:active { + background-color: rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-subnav-pill > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill > .uk-active > a, +.uk-card-primary.uk-card-body .uk-subnav-pill > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav-pill > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-subnav-pill > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav-pill > .uk-active > a, +.uk-overlay-primary .uk-subnav-pill > .uk-active > a, +.uk-offcanvas-bar .uk-subnav-pill > .uk-active > a { + background-color: #fff; + color: #666; +} +.uk-light .uk-subnav > .uk-disabled > a, +.uk-section-primary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav > .uk-disabled > a, +.uk-card-primary.uk-card-body .uk-subnav > .uk-disabled > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-subnav > .uk-disabled > a, +.uk-card-secondary.uk-card-body .uk-subnav > .uk-disabled > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-subnav > .uk-disabled > a, +.uk-overlay-primary .uk-subnav > .uk-disabled > a, +.uk-offcanvas-bar .uk-subnav > .uk-disabled > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-breadcrumb > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > *, +.uk-card-primary.uk-card-body .uk-breadcrumb > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > *, +.uk-card-secondary.uk-card-body .uk-breadcrumb > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > *, +.uk-overlay-primary .uk-breadcrumb > * > *, +.uk-offcanvas-bar .uk-breadcrumb > * > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-breadcrumb > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > * > :hover, +.uk-card-primary.uk-card-body .uk-breadcrumb > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > :hover, +.uk-card-secondary.uk-card-body .uk-breadcrumb > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > * > :hover, +.uk-overlay-primary .uk-breadcrumb > * > :hover, +.uk-offcanvas-bar .uk-breadcrumb > * > :hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-breadcrumb > :last-child > *, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > :last-child > *, +.uk-card-primary.uk-card-body .uk-breadcrumb > :last-child > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > :last-child > *, +.uk-card-secondary.uk-card-body .uk-breadcrumb > :last-child > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > :last-child > *, +.uk-overlay-primary .uk-breadcrumb > :last-child > *, +.uk-offcanvas-bar .uk-breadcrumb > :last-child > * { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary.uk-card-body .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary.uk-card-body .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-overlay-primary .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before, +.uk-offcanvas-bar .uk-breadcrumb > :nth-child(n+2):not(.uk-first-column)::before { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-pagination > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > * > *, +.uk-card-primary.uk-card-body .uk-pagination > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > * > *, +.uk-card-secondary.uk-card-body .uk-pagination > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > * > *, +.uk-overlay-primary .uk-pagination > * > *, +.uk-offcanvas-bar .uk-pagination > * > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-pagination > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > * > :hover, +.uk-card-primary.uk-card-body .uk-pagination > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > * > :hover, +.uk-card-secondary.uk-card-body .uk-pagination > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > * > :hover, +.uk-overlay-primary .uk-pagination > * > :hover, +.uk-offcanvas-bar .uk-pagination > * > :hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-pagination > .uk-active > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > .uk-active > *, +.uk-card-primary.uk-card-body .uk-pagination > .uk-active > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > .uk-active > *, +.uk-card-secondary.uk-card-body .uk-pagination > .uk-active > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > .uk-active > *, +.uk-overlay-primary .uk-pagination > .uk-active > *, +.uk-offcanvas-bar .uk-pagination > .uk-active > * { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-pagination > .uk-disabled > *, +.uk-section-primary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination > .uk-disabled > *, +.uk-card-primary.uk-card-body .uk-pagination > .uk-disabled > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-pagination > .uk-disabled > *, +.uk-card-secondary.uk-card-body .uk-pagination > .uk-disabled > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-pagination > .uk-disabled > *, +.uk-overlay-primary .uk-pagination > .uk-disabled > *, +.uk-offcanvas-bar .uk-pagination > .uk-disabled > * { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-tab::before, +.uk-section-primary:not(.uk-preserve-color) .uk-tab::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before, +.uk-card-primary.uk-card-body .uk-tab::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab::before, +.uk-card-secondary.uk-card-body .uk-tab::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab::before, +.uk-overlay-primary .uk-tab::before, +.uk-offcanvas-bar .uk-tab::before { + border-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-tab > * > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > * > a, +.uk-card-primary.uk-card-body .uk-tab > * > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > * > a, +.uk-card-secondary.uk-card-body .uk-tab > * > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > * > a, +.uk-overlay-primary .uk-tab > * > a, +.uk-offcanvas-bar .uk-tab > * > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-tab > * > a:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > * > a:hover, +.uk-card-primary.uk-card-body .uk-tab > * > a:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > * > a:hover, +.uk-card-secondary.uk-card-body .uk-tab > * > a:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > * > a:hover, +.uk-overlay-primary .uk-tab > * > a:hover, +.uk-offcanvas-bar .uk-tab > * > a:hover { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-tab > .uk-active > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > .uk-active > a, +.uk-card-primary.uk-card-body .uk-tab > .uk-active > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > .uk-active > a, +.uk-card-secondary.uk-card-body .uk-tab > .uk-active > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > .uk-active > a, +.uk-overlay-primary .uk-tab > .uk-active > a, +.uk-offcanvas-bar .uk-tab > .uk-active > a { + color: #fff; + border-color: #fff; +} +.uk-light .uk-tab > .uk-disabled > a, +.uk-section-primary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-section-secondary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-tile-primary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-tile-secondary:not(.uk-preserve-color) .uk-tab > .uk-disabled > a, +.uk-card-primary.uk-card-body .uk-tab > .uk-disabled > a, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-tab > .uk-disabled > a, +.uk-card-secondary.uk-card-body .uk-tab > .uk-disabled > a, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-tab > .uk-disabled > a, +.uk-overlay-primary .uk-tab > .uk-disabled > a, +.uk-offcanvas-bar .uk-tab > .uk-disabled > a { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-slidenav, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav, +.uk-card-primary.uk-card-body .uk-slidenav, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav, +.uk-card-secondary.uk-card-body .uk-slidenav, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav, +.uk-overlay-primary .uk-slidenav, +.uk-offcanvas-bar .uk-slidenav { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-slidenav:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover, +.uk-card-primary.uk-card-body .uk-slidenav:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav:hover, +.uk-card-secondary.uk-card-body .uk-slidenav:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav:hover, +.uk-overlay-primary .uk-slidenav:hover, +.uk-offcanvas-bar .uk-slidenav:hover { + color: rgba(255, 255, 255, 0.95); +} +.uk-light .uk-slidenav:active, +.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active, +.uk-card-primary.uk-card-body .uk-slidenav:active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-slidenav:active, +.uk-card-secondary.uk-card-body .uk-slidenav:active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-slidenav:active, +.uk-overlay-primary .uk-slidenav:active, +.uk-offcanvas-bar .uk-slidenav:active { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-dotnav > * > *, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > *, +.uk-card-primary.uk-card-body .uk-dotnav > * > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > *, +.uk-card-secondary.uk-card-body .uk-dotnav > * > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > *, +.uk-overlay-primary .uk-dotnav > * > *, +.uk-offcanvas-bar .uk-dotnav > * > * { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.9); +} +.uk-light .uk-dotnav > * > :hover, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > :hover, +.uk-card-primary.uk-card-body .uk-dotnav > * > :hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > :hover, +.uk-card-secondary.uk-card-body .uk-dotnav > * > :hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > :hover, +.uk-overlay-primary .uk-dotnav > * > :hover, +.uk-offcanvas-bar .uk-dotnav > * > :hover { + background-color: rgba(255, 255, 255, 0.9); + border-color: transparent; +} +.uk-light .uk-dotnav > * > :active, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > * > :active, +.uk-card-primary.uk-card-body .uk-dotnav > * > :active, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > * > :active, +.uk-card-secondary.uk-card-body .uk-dotnav > * > :active, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > * > :active, +.uk-overlay-primary .uk-dotnav > * > :active, +.uk-offcanvas-bar .uk-dotnav > * > :active { + background-color: rgba(255, 255, 255, 0.5); + border-color: transparent; +} +.uk-light .uk-dotnav > .uk-active > *, +.uk-section-primary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav > .uk-active > *, +.uk-card-primary.uk-card-body .uk-dotnav > .uk-active > *, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-dotnav > .uk-active > *, +.uk-card-secondary.uk-card-body .uk-dotnav > .uk-active > *, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-dotnav > .uk-active > *, +.uk-overlay-primary .uk-dotnav > .uk-active > *, +.uk-offcanvas-bar .uk-dotnav > .uk-active > * { + background-color: rgba(255, 255, 255, 0.9); + border-color: transparent; +} +.uk-light .uk-text-lead, +.uk-section-primary:not(.uk-preserve-color) .uk-text-lead, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead, +.uk-card-primary.uk-card-body .uk-text-lead, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-lead, +.uk-card-secondary.uk-card-body .uk-text-lead, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-lead, +.uk-overlay-primary .uk-text-lead, +.uk-offcanvas-bar .uk-text-lead { + color: rgba(255, 255, 255, 0.7); +} +.uk-light .uk-text-meta, +.uk-section-primary:not(.uk-preserve-color) .uk-text-meta, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta, +.uk-card-primary.uk-card-body .uk-text-meta, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-meta, +.uk-card-secondary.uk-card-body .uk-text-meta, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-meta, +.uk-overlay-primary .uk-text-meta, +.uk-offcanvas-bar .uk-text-meta { + color: rgba(255, 255, 255, 0.5); +} +.uk-light .uk-text-muted, +.uk-section-primary:not(.uk-preserve-color) .uk-text-muted, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted, +.uk-card-primary.uk-card-body .uk-text-muted, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-muted, +.uk-card-secondary.uk-card-body .uk-text-muted, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-muted, +.uk-overlay-primary .uk-text-muted, +.uk-offcanvas-bar .uk-text-muted { + color: rgba(255, 255, 255, 0.5) !important; +} +.uk-light .uk-text-emphasis, +.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis, +.uk-card-primary.uk-card-body .uk-text-emphasis, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-emphasis, +.uk-card-secondary.uk-card-body .uk-text-emphasis, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-emphasis, +.uk-overlay-primary .uk-text-emphasis, +.uk-offcanvas-bar .uk-text-emphasis { + color: #fff !important; +} +.uk-light .uk-text-primary, +.uk-section-primary:not(.uk-preserve-color) .uk-text-primary, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary, +.uk-card-primary.uk-card-body .uk-text-primary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-primary, +.uk-card-secondary.uk-card-body .uk-text-primary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-primary, +.uk-overlay-primary .uk-text-primary, +.uk-offcanvas-bar .uk-text-primary { + color: #fff !important; +} +.uk-light .uk-text-secondary, +.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary, +.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary, +.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary, +.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary, +.uk-card-primary.uk-card-body .uk-text-secondary, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-text-secondary, +.uk-card-secondary.uk-card-body .uk-text-secondary, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-text-secondary, +.uk-overlay-primary .uk-text-secondary, +.uk-offcanvas-bar .uk-text-secondary { + color: #fff !important; +} +.uk-light .uk-column-divider, +.uk-section-primary:not(.uk-preserve-color) .uk-column-divider, +.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider, +.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider, +.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider, +.uk-card-primary.uk-card-body .uk-column-divider, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-column-divider, +.uk-card-secondary.uk-card-body .uk-column-divider, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-column-divider, +.uk-overlay-primary .uk-column-divider, +.uk-offcanvas-bar .uk-column-divider { + column-rule-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-logo, +.uk-section-primary:not(.uk-preserve-color) .uk-logo, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo, +.uk-card-primary.uk-card-body .uk-logo, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo, +.uk-card-secondary.uk-card-body .uk-logo, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo, +.uk-overlay-primary .uk-logo, +.uk-offcanvas-bar .uk-logo { + color: #fff; +} +.uk-light .uk-logo:hover, +.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover, +.uk-card-primary.uk-card-body .uk-logo:hover, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo:hover, +.uk-card-secondary.uk-card-body .uk-logo:hover, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo:hover, +.uk-overlay-primary .uk-logo:hover, +.uk-offcanvas-bar .uk-logo:hover { + color: #fff; +} +.uk-light .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-section-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-section-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-tile-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-primary.uk-card-body .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-secondary.uk-card-body .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-overlay-primary .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse), +.uk-offcanvas-bar .uk-logo:has(.uk-logo-inverse) > :not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse) { + display: none; +} +.uk-light .uk-logo-inverse, +.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse, +.uk-card-primary.uk-card-body .uk-logo-inverse, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-logo-inverse, +.uk-card-secondary.uk-card-body .uk-logo-inverse, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-logo-inverse, +.uk-overlay-primary .uk-logo-inverse, +.uk-offcanvas-bar .uk-logo-inverse { + display: block; +} +.uk-light .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-primary.uk-card-body .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-secondary.uk-card-body .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-overlay-primary .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child, +.uk-offcanvas-bar .uk-table-striped > tr:nth-of-type(even):last-child, +.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-light .uk-accordion-title::before, +.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before, +.uk-card-primary.uk-card-body .uk-accordion-title::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-accordion-title::before, +.uk-card-secondary.uk-card-body .uk-accordion-title::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-accordion-title::before, +.uk-overlay-primary .uk-accordion-title::before, +.uk-offcanvas-bar .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +.uk-light .uk-open > .uk-accordion-title::before, +.uk-section-primary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-section-secondary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-tile-primary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-tile-secondary:not(.uk-preserve-color) .uk-open > .uk-accordion-title::before, +.uk-card-primary.uk-card-body .uk-open > .uk-accordion-title::before, +.uk-card-primary > :not([class*="uk-card-media"]) .uk-open > .uk-accordion-title::before, +.uk-card-secondary.uk-card-body .uk-open > .uk-accordion-title::before, +.uk-card-secondary > :not([class*="uk-card-media"]) .uk-open > .uk-accordion-title::before, +.uk-overlay-primary .uk-open > .uk-accordion-title::before, +.uk-offcanvas-bar .uk-open > .uk-accordion-title::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E"); +} +/* + * Pass dropbar behind color to JS + */ +* { + --uk-inverse: initial; +} +.uk-light, +.uk-section-primary:not(.uk-preserve-color), +.uk-section-secondary:not(.uk-preserve-color), +.uk-tile-primary:not(.uk-preserve-color), +.uk-tile-secondary:not(.uk-preserve-color), +.uk-card-primary.uk-card-body, +.uk-card-primary > :not([class*="uk-card-media"]), +.uk-card-secondary.uk-card-body, +.uk-card-secondary > :not([class*="uk-card-media"]), +.uk-overlay-primary, +.uk-offcanvas-bar { + --uk-inverse: light; +} +.uk-dark, +.uk-section-default:not(.uk-preserve-color), +.uk-section-muted:not(.uk-preserve-color), +.uk-tile-default:not(.uk-preserve-color), +.uk-tile-muted:not(.uk-preserve-color), +.uk-card-default.uk-card-body, +.uk-card-default > :not([class*="uk-card-media"]), +.uk-overlay-default, +.uk-dropbar, +.uk-navbar-container:not(.uk-navbar-transparent), +.uk-navbar-dropdown, +.uk-dropdown { + --uk-inverse: dark; +} +.uk-inverse-light { + --uk-inverse: light !important; +} +.uk-inverse-dark { + --uk-inverse: dark !important; +} +/* ======================================================================== + Component: Print + ========================================================================== */ +@media print { + *, + *::before, + *::after { + background: transparent !important; + color: black !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} diff --git a/web/static/uikit/css/uikit.min.css b/web/static/uikit/css/uikit.min.css new file mode 100644 index 0000000..c5e4197 --- /dev/null +++ b/web/static/uikit/css/uikit.min.css @@ -0,0 +1 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:400;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}.uk-link,a{color:#1e87f0;text-decoration:none;cursor:pointer}.uk-link-toggle:hover .uk-link,.uk-link:hover,a:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}address,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 20px 0}*+address,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:20px}.uk-h1,.uk-h2,.uk-h3,.uk-h4,.uk-h5,.uk-h6,.uk-heading-2xlarge,.uk-heading-3xlarge,.uk-heading-large,.uk-heading-medium,.uk-heading-small,.uk-heading-xlarge,h1,h2,h3,h4,h5,h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:400;color:#333;text-transform:none}*+.uk-h1,*+.uk-h2,*+.uk-h3,*+.uk-h4,*+.uk-h5,*+.uk-h6,*+.uk-heading-2xlarge,*+.uk-heading-3xlarge,*+.uk-heading-large,*+.uk-heading-medium,*+.uk-heading-small,*+.uk-heading-xlarge,*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:40px}.uk-h1,h1{font-size:2.23125rem;line-height:1.2}.uk-h2,h2{font-size:1.7rem;line-height:1.3}.uk-h3,h3{font-size:1.5rem;line-height:1.4}.uk-h4,h4{font-size:1.25rem;line-height:1.4}.uk-h5,h5{font-size:16px;line-height:1.4}.uk-h6,h6{font-size:.875rem;line-height:1.4}@media (min-width:960px){.uk-h1,h1{font-size:2.625rem}.uk-h2,h2{font-size:2rem}}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}.uk-hr,hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+.uk-hr,*+hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:0.875rem/1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:0}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s:640px;--uk-breakpoint-m:960px;--uk-breakpoint-l:1200px;--uk-breakpoint-xl:1600px}.uk-link-muted a,.uk-link-toggle .uk-link-muted,a.uk-link-muted{color:#999}.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted,a.uk-link-muted:hover{color:#666}.uk-link-text a,.uk-link-toggle .uk-link-text,a.uk-link-text{color:inherit}.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text,a.uk-link-text:hover{color:#999}.uk-link-heading a,.uk-link-toggle .uk-link-heading,a.uk-link-heading{color:inherit}.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading,a.uk-link-heading:hover{color:#1e87f0;text-decoration:none}.uk-link-reset a,a.uk-link-reset{color:inherit!important;text-decoration:none!important}.uk-link-toggle{color:inherit!important;text-decoration:none!important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}.uk-heading-3xlarge{font-size:8rem;line-height:1}@media (min-width:960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}.uk-heading-3xlarge{font-size:11rem}}@media (min-width:1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}.uk-heading-3xlarge{font-size:15rem}}.uk-heading-divider{padding-bottom:calc(5px + .1em);border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-.1 * 1em);vertical-align:middle;height:calc(4px + .7em);margin-right:calc(5px + .2em);border-left:calc(5px + .1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::after,.uk-heading-line>::before{content:"";position:absolute;top:calc(50% - (calc(.2px + .05em)/ 2));width:2000px;border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + .3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + .3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::after,.uk-divider-icon::before{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list{padding:0;list-style:none}.uk-list>*{break-inside:avoid-column}.uk-list>*>:last-child{margin-bottom:0}.uk-list>*>ul,.uk-list>:nth-child(n+2){margin-top:10px}.uk-list-circle,.uk-list-decimal,.uk-list-disc,.uk-list-hyphen,.uk-list-square{padding-left:30px}.uk-list-disc{list-style-type:disc}.uk-list-circle{list-style-type:circle}.uk-list-square{list-style-type:square}.uk-list-decimal{list-style-type:decimal}.uk-list-hyphen{list-style-type:'– '}.uk-list-muted>::marker{color:#999!important}.uk-list-emphasis>::marker{color:#333!important}.uk-list-primary>::marker{color:#1e87f0!important}.uk-list-secondary>::marker{color:#222!important}.uk-list-bullet>*{position:relative;padding-left:30px}.uk-list-bullet>::before{content:"";position:absolute;top:0;left:0;width:30px;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>*>ul,.uk-list-large>:nth-child(n+2){margin-top:20px}.uk-list-collapse>*>ul,.uk-list-collapse>:nth-child(n+2){margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-collapse.uk-list-striped>:nth-child(n+2),.uk-list-large.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:400;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:400;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-divider>:first-child>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped tbody tr:nth-of-type(odd),.uk-table-striped>tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover tbody tr:hover,.uk-table-hover>tr:hover{background:#ffd}.uk-table tbody tr.uk-active,.uk-table>tr.uk-active{background:#ffd}.uk-table-small td,.uk-table-small th{padding:10px 12px}.uk-table-large td,.uk-table-large th{padding:22px 12px}.uk-table-justify td:first-child,.uk-table-justify th:first-child{padding-left:0}.uk-table-justify td:last-child,.uk-table-justify th:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0!important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width:959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive td,.uk-table-responsive th,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive td,.uk-table-responsive th{width:auto!important;max-width:none!important;min-width:0!important;overflow:visible!important;white-space:normal!important}.uk-table-responsive .uk-table-link:not(:first-child)>a,.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive th:not(:first-child):not(.uk-table-link){padding-top:5px!important}.uk-table-responsive .uk-table-link:not(:last-child)>a,.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive th:not(:last-child):not(.uk-table-link){padding-bottom:5px!important}.uk-table-justify.uk-table-responsive td,.uk-table-justify.uk-table-responsive th{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-table-striped>tr:nth-of-type(2n):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0,0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none!important}.uk-icon-link:hover{color:#666}.uk-active>.uk-icon-link,.uk-icon-link:active{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:.1s ease-in-out;transition-property:color,background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-active>.uk-icon-button,.uk-icon-button:active{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:0 0}.uk-range:focus{outline:0}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:active::-webkit-slider-runnable-track,.uk-range:focus::-webkit-slider-runnable-track{background:#dedede}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dedede}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-checkbox,.uk-input,.uk-radio,.uk-select,.uk-textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:700}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input[type=date]::-webkit-datetime-edit,.uk-input[type=datetime-local]::-webkit-datetime-edit,.uk-input[type=time]::-webkit-datetime-edit{display:inline-flex;align-items:center;height:100%;padding:0}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-checkbox:not(:disabled),.uk-radio:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0;min-width:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:0;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}[multiple].uk-form-small,[size].uk-form-small,textarea.uk-form-small{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}[multiple].uk-form-large,[size].uk-form-large,textarea.uk-form-large{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:0 0;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:focus,.uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none!important}.uk-checkbox,.uk-radio{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-checkbox:focus,.uk-radio:focus{background-color:rgba(0,0,0,0);outline:0;border-color:#1e87f0}.uk-checkbox:checked,.uk-checkbox:indeterminate,.uk-radio:checked{background-color:#1e87f0;border-color:transparent}.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus,.uk-radio:checked:focus{background-color:#0e6dcd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled,.uk-radio:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom input[type=file],.uk-form-custom select{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px!important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px!important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color,border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:transparent;color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:transparent;color:#333;border-color:#b2b2b2}.uk-button-default.uk-active,.uk-button-default:active{background-color:transparent;color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover{background-color:#0f7ae5;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0e6dcd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover{background-color:#151515;color:#fff}.uk-button-secondary.uk-active,.uk-button-secondary:active{background-color:#080808;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#ec2147;color:#fff}.uk-button-danger:disabled,.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled{background-color:transparent;color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:0 0;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid currentColor;transition:right .3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:0 0;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button.uk-active,.uk-button-group .uk-button:active,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:hover{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:transparent}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0;transition:width .6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width:960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{--uk-inverse:dark;background:#fff}.uk-section-muted{--uk-inverse:dark;background:#f8f8f8}.uk-section-primary{--uk-inverse:light;background:#1e87f0}.uk-section-secondary{--uk-inverse:light;background:#222}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width:640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width:960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width:640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width:960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width:640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{--uk-inverse:dark;background-color:#fff}.uk-tile-muted{--uk-inverse:dark;background-color:#f8f8f8}.uk-tile-primary{--uk-inverse:light;background-color:#1e87f0}.uk-tile-secondary{--uk-inverse:light;background-color:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow .1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width:1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-footer>:last-child,.uk-card-header>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#1e87f0;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default{--uk-inverse:dark;background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{--uk-inverse:light;background-color:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-secondary{--uk-inverse:light;background-color:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-small .uk-card-body,.uk-card-small.uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width:1200px){.uk-card-large .uk-card-body,.uk-card-large.uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default .uk-nav-divider,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default>li>a{padding-left:30px;padding-right:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width:1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default .uk-nav-divider,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default>li>a{padding-left:40px;padding-right:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default .uk-nav-divider,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default>li>a{padding-left:20px;padding-right:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width:1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default .uk-nav-divider,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default>li>a{padding-left:0;padding-right:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:.1s ease-in-out;transition-property:color,opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color .1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fff6ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:0 0;border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff!important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{--uk-inverse:dark;background:rgba(255,255,255,.8)}.uk-overlay-primary{--uk-inverse:light;background:rgba(34,34,34,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width:960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width:960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:0}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:0 0;border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-default .uk-search-icon{padding-left:10px;padding-right:10px}.uk-search-default:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:40px}.uk-search-default:has(.uk-search-icon-flip) .uk-search-input{padding-right:40px}.uk-search-navbar{width:240px}.uk-search-navbar .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:#fff;border:1px solid #e5e5e5}.uk-search-navbar .uk-search-input:focus{background-color:#fff;border-color:#1e87f0}.uk-search-navbar .uk-search-icon{padding-left:10px;padding-right:10px}.uk-search-navbar:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:40px}.uk-search-navbar:has(.uk-search-icon-flip) .uk-search-input{padding-right:40px}.uk-search-medium{width:400px}.uk-search-medium .uk-search-input{height:55px;padding-left:12px;padding-right:12px;background:0 0;font-size:1.5rem;border:1px solid #e5e5e5}.uk-search-medium .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-medium .uk-search-icon{padding-left:12px;padding-right:12px}.uk-search-medium:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:48px}.uk-search-medium:has(.uk-search-icon-flip) .uk-search-input{padding-right:48px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:90px;padding-left:20px;padding-right:20px;background:0 0;font-size:2.625rem;border:1px solid #e5e5e5}.uk-search-large .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-large .uk-search-icon{padding-left:20px;padding-right:20px}.uk-search-large:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:80px}.uk-search-large:has(.uk-search-icon-flip) .uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset:20px;--uk-position-viewport-offset:15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100%!important}.uk-drop-parent-icon{margin-left:.25em;transition:transform .3s ease-out}[aria-expanded=true]>.uk-drop-parent-icon{transform:rotateX(180deg)}.uk-dropbar{--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:0;--uk-inverse:dark;width:auto;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width:640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar :focus-visible{outline-color:#333!important}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropnav-dropbar{position:absolute;z-index:980;padding:0;left:0;right:0}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;padding:15px 15px;background:rgba(0,0,0,.6);opacity:0;transition:opacity .15s linear}@media (min-width:640px){.uk-modal{padding:50px 30px}}@media (min-width:960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100%!important;background:#fff;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:0 0}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width:640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0,-100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width:960px){.uk-modal-close-outside{right:0;transform:translate(100%,-100%)}}.uk-modal-close-full{top:0;right:0;padding:10px;background:#fff}@media (min-width:960px){.uk-modal-close-full{padding:20px}}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform,opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden;overflow:clip}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none!important;box-sizing:border-box;max-width:100%;position:relative}.uk-sticky{position:relative;z-index:980;box-sizing:border-box}.uk-sticky-fixed{margin:0!important}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{--uk-inverse:light;position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto}@media (min-width:640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width:640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width:640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;right:5px;padding:5px}@media (min-width:640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-container,.uk-offcanvas-page{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;left:0;transition:left .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width:640px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content:.}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-bottom-right,.uk-notification-top-right{left:auto;right:10px}.uk-notification-bottom-center,.uk-notification-top-center{left:50%;margin-left:-175px}.uk-notification-bottom-center,.uk-notification-bottom-left,.uk-notification-bottom-right{top:auto;bottom:10px}@media (max-width:639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset:10px;--uk-position-viewport-offset:10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed!important;z-index:1050!important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width:640px){.uk-countdown-number{font-size:4rem}}@media (min-width:960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width:640px){.uk-countdown-separator{font-size:2rem}}@media (min-width:960px){.uk-countdown-separator{font-size:3rem}}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-image:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.4));transition:opacity .1s ease-in-out}.uk-thumbnav>*>:hover::after{opacity:0}.uk-thumbnav>.uk-active>::after{opacity:0}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:.25em;line-height:0;color:#999;text-decoration:none;font-size:.875rem;transition:.1s ease-in-out;transition-property:color,background-color}.uk-iconnav>*>a:hover{color:#666}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:30px}@media (min-width:1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:40px}}.uk-grid-column-small,.uk-grid-small{margin-left:-15px}.uk-grid-column-small>*,.uk-grid-small>*{padding-left:15px}*+.uk-grid-margin-small,.uk-grid+.uk-grid-row-small,.uk-grid+.uk-grid-small,.uk-grid-row-small>.uk-grid-margin,.uk-grid-small>.uk-grid-margin{margin-top:15px}.uk-grid-column-medium,.uk-grid-medium{margin-left:-30px}.uk-grid-column-medium>*,.uk-grid-medium>*{padding-left:30px}*+.uk-grid-margin-medium,.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin{margin-top:30px}.uk-grid-column-large,.uk-grid-large{margin-left:-40px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:40px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:40px}@media (min-width:1200px){.uk-grid-column-large,.uk-grid-large{margin-left:-70px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:70px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width:1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-column-small,.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-column-small>*,.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-column-medium,.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-column-medium>*,.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width:1200px){.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-item-match,.uk-grid-match>*{display:flex;flex-wrap:wrap}.uk-grid-item-match>:not([class*=uk-width]),.uk-grid-match>*>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto;transition:transform .3s ease-out}.uk-nav>li.uk-open>a .uk-nav-parent-icon{transform:rotateX(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-medium{font-size:2.8875rem;line-height:1}.uk-nav-large{font-size:3.4rem;line-height:1}.uk-nav-xlarge{font-size:4rem;line-height:1}@media (min-width:960px){.uk-nav-medium{font-size:3.5rem}.uk-nav-large{font-size:4rem}.uk-nav-xlarge{font-size:6rem}}@media (min-width:1200px){.uk-nav-medium{font-size:4rem}.uk-nav-large{font-size:6rem}.uk-nav-xlarge{font-size:8rem}}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:.25em}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{display:flex;gap:15px;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 15px)}.uk-navbar-center-right{left:calc(100% + 15px)}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:15px;margin:0;padding:0;list-style:none}.uk-navbar-center:only-child,.uk-navbar-left,.uk-navbar-right{flex-wrap:wrap}.uk-navbar-item,.uk-navbar-nav>li>a,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#999;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded=true]{color:#666}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-left:4px;transition:transform .3s ease-out}.uk-navbar-nav>li>a[aria-expanded=true] .uk-navbar-parent-icon{transform:rotateX(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded=true]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{--uk-position-offset:15px;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown :focus-visible{outline-color:#333!important}.uk-navbar-dropdown .uk-drop-grid{margin-left:-30px}.uk-navbar-dropdown .uk-drop-grid>*{padding-left:30px}.uk-navbar-dropdown .uk-drop-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-width-2:not(.uk-drop-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-drop-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-drop-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-drop-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset:0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:0 0;padding:25px 0 25px 0;--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;box-shadow:none}@media (min-width:640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset:0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-container{transition:.1s ease-in-out;transition-property:background-color}@media (min-width:960px){.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{gap:30px}.uk-navbar-center-left{right:calc(100% + 30px)}.uk-navbar-center-right{left:calc(100% + 30px)}}@media (min-width:960px){.uk-navbar-nav{gap:30px}}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0;margin-right:20px;border-left:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill{margin-left:-20px}.uk-subnav-pill>*{padding-left:20px}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:0 0;color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>a:not([href]),.uk-breadcrumb>:last-child>span{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:#999;transition:color .1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color .1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{justify-content:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,.5);transition:color .1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,.9)}.uk-slidenav:active{color:rgba(102,102,102,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:0 0;text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,.4);transition:.2s ease-in-out;transition-property:background-color,border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,.6);border-color:transparent}.uk-dotnav>*>:active{background-color:rgba(102,102,102,.2);border-color:transparent}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,.6);border-color:transparent}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-dropdown{--uk-position-offset:10px;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:auto;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown :focus-visible{outline-color:#333!important}.uk-dropdown-large{padding:40px}.uk-dropdown-dropbar{--uk-position-offset:10px;width:auto;background:0 0;padding:5px 0 25px 0;--uk-position-viewport-offset:15px;box-shadow:none}@media (min-width:640px){.uk-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-dropdown-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li.uk-active>a,.uk-dropdown-nav>li>a:hover{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-lightbox{--uk-inverse:light;display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items{margin:0;padding:0;list-style:none}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:flex-start;will-change:transform,opacity;overflow:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-items-fit>*{align-items:center}.uk-lightbox-items-fit>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items-fit>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items.uk-lightbox-items-fit .uk-lightbox-zoom:hover{cursor:zoom-in}.uk-lightbox-items:not(.uk-lightbox-items-fit) .uk-lightbox-zoom:hover{cursor:zoom-out}.uk-lightbox-thumbnav-vertical :where(img,video){max-width:100px}.uk-lightbox-thumbnav:not(.uk-lightbox-thumbnav-vertical) :where(img,video){max-height:100px}.uk-lightbox-dotnav:empty,.uk-lightbox-thumbnav:empty{display:none}.uk-lightbox-caption:empty{display:none}.uk-lightbox-caption{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-caption>*{color:rgba(255,255,255,.7)}.uk-lightbox-counter:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*=uk-animation-]{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade,uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade,uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade,uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade,uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade,uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade,uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade,uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade,uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade,uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade,uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade,uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade,uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade,uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade,uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% / 3)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% / 6)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width:640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% / 3)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% / 6)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@s>:not([class*=uk-width]),.uk-child-width-1-2\@s>:not([class*=uk-width]),.uk-child-width-1-3\@s>:not([class*=uk-width]),.uk-child-width-1-4\@s>:not([class*=uk-width]),.uk-child-width-1-5\@s>:not([class*=uk-width]),.uk-child-width-1-6\@s>:not([class*=uk-width]),.uk-child-width-auto\@s>:not([class*=uk-width]){flex:initial}}@media (min-width:960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% / 3)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% / 6)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@m>:not([class*=uk-width]),.uk-child-width-1-2\@m>:not([class*=uk-width]),.uk-child-width-1-3\@m>:not([class*=uk-width]),.uk-child-width-1-4\@m>:not([class*=uk-width]),.uk-child-width-1-5\@m>:not([class*=uk-width]),.uk-child-width-1-6\@m>:not([class*=uk-width]),.uk-child-width-auto\@m>:not([class*=uk-width]){flex:initial}}@media (min-width:1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% / 3)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% / 6)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@l>:not([class*=uk-width]),.uk-child-width-1-2\@l>:not([class*=uk-width]),.uk-child-width-1-3\@l>:not([class*=uk-width]),.uk-child-width-1-4\@l>:not([class*=uk-width]),.uk-child-width-1-5\@l>:not([class*=uk-width]),.uk-child-width-1-6\@l>:not([class*=uk-width]),.uk-child-width-auto\@l>:not([class*=uk-width]){flex:initial}}@media (min-width:1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% / 3)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% / 6)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@xl>:not([class*=uk-width]),.uk-child-width-1-2\@xl>:not([class*=uk-width]),.uk-child-width-1-3\@xl>:not([class*=uk-width]),.uk-child-width-1-4\@xl>:not([class*=uk-width]),.uk-child-width-1-5\@xl>:not([class*=uk-width]),.uk-child-width-1-6\@xl>:not([class*=uk-width]),.uk-child-width-auto\@xl>:not([class*=uk-width]){flex:initial}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% / 3)}.uk-width-2-3{width:calc(200% / 3)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% / 6)}.uk-width-5-6{width:calc(500% / 6)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width:640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% / 3)}.uk-width-2-3\@s{width:calc(200% / 3)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% / 6)}.uk-width-5-6\@s{width:calc(500% / 6)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}.uk-width-1-1\@s,.uk-width-1-2\@s,.uk-width-1-3\@s,.uk-width-1-4\@s,.uk-width-1-5\@s,.uk-width-1-6\@s,.uk-width-2-3\@s,.uk-width-2-5\@s,.uk-width-2xlarge\@s,.uk-width-3-4\@s,.uk-width-3-5\@s,.uk-width-4-5\@s,.uk-width-5-6\@s,.uk-width-auto\@s,.uk-width-large\@s,.uk-width-medium\@s,.uk-width-small\@s,.uk-width-xlarge\@s{flex:initial}}@media (min-width:960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% / 3)}.uk-width-2-3\@m{width:calc(200% / 3)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% / 6)}.uk-width-5-6\@m{width:calc(500% / 6)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}.uk-width-1-1\@m,.uk-width-1-2\@m,.uk-width-1-3\@m,.uk-width-1-4\@m,.uk-width-1-5\@m,.uk-width-1-6\@m,.uk-width-2-3\@m,.uk-width-2-5\@m,.uk-width-2xlarge\@m,.uk-width-3-4\@m,.uk-width-3-5\@m,.uk-width-4-5\@m,.uk-width-5-6\@m,.uk-width-auto\@m,.uk-width-large\@m,.uk-width-medium\@m,.uk-width-small\@m,.uk-width-xlarge\@m{flex:initial}}@media (min-width:1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% / 3)}.uk-width-2-3\@l{width:calc(200% / 3)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% / 6)}.uk-width-5-6\@l{width:calc(500% / 6)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}.uk-width-1-1\@l,.uk-width-1-2\@l,.uk-width-1-3\@l,.uk-width-1-4\@l,.uk-width-1-5\@l,.uk-width-1-6\@l,.uk-width-2-3\@l,.uk-width-2-5\@l,.uk-width-2xlarge\@l,.uk-width-3-4\@l,.uk-width-3-5\@l,.uk-width-4-5\@l,.uk-width-5-6\@l,.uk-width-auto\@l,.uk-width-large\@l,.uk-width-medium\@l,.uk-width-small\@l,.uk-width-xlarge\@l{flex:initial}}@media (min-width:1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% / 3)}.uk-width-2-3\@xl{width:calc(200% / 3)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% / 6)}.uk-width-5-6\@xl{width:calc(500% / 6)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}.uk-width-1-1\@xl,.uk-width-1-2\@xl,.uk-width-1-3\@xl,.uk-width-1-4\@xl,.uk-width-1-5\@xl,.uk-width-1-6\@xl,.uk-width-2-3\@xl,.uk-width-2-5\@xl,.uk-width-2xlarge\@xl,.uk-width-3-4\@xl,.uk-width-3-5\@xl,.uk-width-4-5\@xl,.uk-width-5-6\@xl,.uk-width-auto\@xl,.uk-width-large\@xl,.uk-width-medium\@xl,.uk-width-small\@xl,.uk-width-xlarge\@xl{flex:initial}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta>a{color:#999}.uk-text-meta>a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-decoration-none{text-decoration:none!important}.uk-text-muted{color:#999!important}.uk-text-emphasis{color:#333!important}.uk-text-primary{color:#1e87f0!important}.uk-text-secondary{color:#222!important}.uk-text-success{color:#32d296!important}.uk-text-warning{color:#faa05a!important}.uk-text-danger{color:#f0506e!important}.uk-text-background{-webkit-background-clip:text;color:transparent!important;display:inline-block;background-color:#1e87f0;background-image:linear-gradient(90deg,#1e87f0 0,#411ef0 100%)}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}@media (min-width:640px){.uk-text-left\@s{text-align:left!important}.uk-text-right\@s{text-align:right!important}.uk-text-center\@s{text-align:center!important}}@media (min-width:960px){.uk-text-left\@m{text-align:left!important}.uk-text-right\@m{text-align:right!important}.uk-text-center\@m{text-align:center!important}}@media (min-width:1200px){.uk-text-left\@l{text-align:left!important}.uk-text-right\@l{text-align:right!important}.uk-text-center\@l{text-align:center!important}}@media (min-width:1600px){.uk-text-left\@xl{text-align:left!important}.uk-text-right\@xl{text-align:right!important}.uk-text-center\@xl{text-align:center!important}}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}.uk-text-baseline{vertical-align:baseline!important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.uk-text-truncate,th.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}td.uk-text-break,th.uk-text-break{word-break:break-word}.uk-text-stroke{-webkit-text-stroke:calc(1.4px + 0.002em);-webkit-text-fill-color:transparent}[class*=uk-column-]{column-gap:30px}@media (min-width:1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0,0,0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width:1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width:640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width:960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width:1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width:1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[data-uk-cover]:where(canvas,iframe,svg),[uk-cover]:where(canvas,iframe,svg){max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x:-50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y))}iframe[data-uk-cover],iframe[uk-cover]{pointer-events:none}[data-uk-cover]:where(img,video),[uk-cover]:where(img,video){position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;object-fit:cover;object-position:center}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-contain,.uk-background-cover,.uk-background-height-1-1,.uk-background-width-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed}@media (pointer:coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width:639px){.uk-background-image\@s{background-image:none!important}}@media (max-width:959px){.uk-background-image\@m{background-image:none!important}}@media (max-width:1199px){.uk-background-image\@l{background-image:none!important}}@media (max-width:1599px){.uk-background-image\@xl{background-image:none!important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width:640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width:960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width:1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@l,.uk-align-left\@m,.uk-align-left\@s{margin-right:40px}.uk-align-right,.uk-align-right\@l,.uk-align-right\@m,.uk-align-right\@s{margin-left:40px}}@media (min-width:1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0,0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[data-uk-responsive],[uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter:blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img,svg,video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%,-50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width:640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width:960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width:1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width:1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}@media (min-width:640px){.uk-flex-stretch\@s{align-items:stretch}.uk-flex-top\@s{align-items:flex-start}.uk-flex-middle\@s{align-items:center}.uk-flex-bottom\@s{align-items:flex-end}}@media (min-width:960px){.uk-flex-stretch\@m{align-items:stretch}.uk-flex-top\@m{align-items:flex-start}.uk-flex-middle\@m{align-items:center}.uk-flex-bottom\@m{align-items:flex-end}}@media (min-width:1200px){.uk-flex-stretch\@l{align-items:stretch}.uk-flex-top\@l{align-items:flex-start}.uk-flex-middle\@l{align-items:center}.uk-flex-bottom\@l{align-items:flex-end}}@media (min-width:1600px){.uk-flex-stretch\@xl{align-items:stretch}.uk-flex-top\@xl{align-items:flex-start}.uk-flex-middle\@xl{align-items:center}.uk-flex-bottom\@xl{align-items:flex-end}}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}@media (min-width:640px){.uk-flex-row\@s{flex-direction:row}.uk-flex-column\@s{flex-direction:column}}@media (min-width:960px){.uk-flex-row\@m{flex-direction:row}.uk-flex-column\@m{flex-direction:column}}@media (min-width:1200px){.uk-flex-row\@l{flex-direction:row}.uk-flex-column\@l{flex-direction:column}}@media (min-width:1600px){.uk-flex-row\@xl{flex-direction:row}.uk-flex-column\@xl{flex-direction:column}}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width:640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width:960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width:1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width:1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-initial{flex:initial}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}@media (min-width:640px){.uk-flex-initial\@s{flex:initial}.uk-flex-none\@s{flex:none}.uk-flex-1\@s{flex:1}}@media (min-width:960px){.uk-flex-initial\@m{flex:initial}.uk-flex-none\@m{flex:none}.uk-flex-1\@m{flex:1}}@media (min-width:1200px){.uk-flex-initial\@l{flex:initial}.uk-flex-none\@l{flex:none}.uk-flex-1\@l{flex:1}}@media (min-width:1600px){.uk-flex-initial\@xl{flex:initial}.uk-flex-none\@xl{flex:none}.uk-flex-1\@xl{flex:1}}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px!important}.uk-margin-top{margin-top:20px!important}.uk-margin-bottom{margin-bottom:20px!important}.uk-margin-left{margin-left:20px!important}.uk-margin-right{margin-right:20px!important}.uk-margin-xsmall{margin-bottom:5px}*+.uk-margin-xsmall{margin-top:5px!important}.uk-margin-xsmall-top{margin-top:5px!important}.uk-margin-xsmall-bottom{margin-bottom:5px!important}.uk-margin-xsmall-left{margin-left:5px!important}.uk-margin-xsmall-right{margin-right:5px!important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px!important}.uk-margin-small-top{margin-top:10px!important}.uk-margin-small-bottom{margin-bottom:10px!important}.uk-margin-small-left{margin-left:10px!important}.uk-margin-small-right{margin-right:10px!important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px!important}.uk-margin-medium-top{margin-top:40px!important}.uk-margin-medium-bottom{margin-bottom:40px!important}.uk-margin-medium-left{margin-left:40px!important}.uk-margin-medium-right{margin-right:40px!important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px!important}.uk-margin-large-top{margin-top:40px!important}.uk-margin-large-bottom{margin-bottom:40px!important}.uk-margin-large-left{margin-left:40px!important}.uk-margin-large-right{margin-right:40px!important}@media (min-width:1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px!important}.uk-margin-large-top{margin-top:70px!important}.uk-margin-large-bottom{margin-bottom:70px!important}.uk-margin-large-left{margin-left:70px!important}.uk-margin-large-right{margin-right:70px!important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px!important}.uk-margin-xlarge-top{margin-top:70px!important}.uk-margin-xlarge-bottom{margin-bottom:70px!important}.uk-margin-xlarge-left{margin-left:70px!important}.uk-margin-xlarge-right{margin-right:70px!important}@media (min-width:1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px!important}.uk-margin-xlarge-top{margin-top:140px!important}.uk-margin-xlarge-bottom{margin-bottom:140px!important}.uk-margin-xlarge-left{margin-left:140px!important}.uk-margin-xlarge-right{margin-right:140px!important}}.uk-margin-auto{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-top{margin-top:auto!important}.uk-margin-auto-bottom{margin-bottom:auto!important}.uk-margin-auto-left{margin-left:auto!important}.uk-margin-auto-right{margin-right:auto!important}.uk-margin-auto-vertical{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:640px){.uk-margin-auto\@s{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@s{margin-left:auto!important}.uk-margin-auto-right\@s{margin-right:auto!important}}@media (min-width:960px){.uk-margin-auto\@m{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@m{margin-left:auto!important}.uk-margin-auto-right\@m{margin-right:auto!important}}@media (min-width:1200px){.uk-margin-auto\@l{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@l{margin-left:auto!important}.uk-margin-auto-right\@l{margin-right:auto!important}}@media (min-width:1600px){.uk-margin-auto\@xl{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@xl{margin-left:auto!important}.uk-margin-auto-right\@xl{margin-right:auto!important}}.uk-margin-remove{margin:0!important}.uk-margin-remove-top{margin-top:0!important}.uk-margin-remove-bottom{margin-bottom:0!important}.uk-margin-remove-left{margin-left:0!important}.uk-margin-remove-right{margin-right:0!important}.uk-margin-remove-vertical{margin-top:0!important;margin-bottom:0!important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0!important}.uk-margin-remove-last-child>:last-child{margin-bottom:0!important}@media (min-width:640px){.uk-margin-remove-left\@s{margin-left:0!important}.uk-margin-remove-right\@s{margin-right:0!important}}@media (min-width:960px){.uk-margin-remove-left\@m{margin-left:0!important}.uk-margin-remove-right\@m{margin-right:0!important}}@media (min-width:1200px){.uk-margin-remove-left\@l{margin-left:0!important}.uk-margin-remove-right\@l{margin-right:0!important}}@media (min-width:1600px){.uk-margin-remove-left\@xl{margin-left:0!important}.uk-margin-remove-right\@xl{margin-right:0!important}}.uk-padding{padding:30px}@media (min-width:1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width:1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0!important}.uk-padding-remove-top{padding-top:0!important}.uk-padding-remove-bottom{padding-bottom:0!important}.uk-padding-remove-left{padding-left:0!important}.uk-padding-remove-right{padding-right:0!important}.uk-padding-remove-vertical{padding-top:0!important;padding-bottom:0!important}.uk-padding-remove-horizontal{padding-left:0!important;padding-right:0!important}:root{--uk-position-margin-offset:0px}[class*=uk-position-bottom],[class*=uk-position-center],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-top]{position:absolute!important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:-50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y));width:max-content}.uk-position-center-vertical,[class*=uk-position-center-left],[class*=uk-position-center-right]{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y:-50%;transform:translate(0,var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-vertical{left:0;right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-bottom-center,.uk-position-center-horizontal,.uk-position-top-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:-50%;transform:translate(var(--uk-position-translate-x),0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-center-horizontal{top:0;bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:15px;--uk-position-margin-offset:15px}.uk-position-medium{margin:30px;--uk-position-margin-offset:30px}.uk-position-large{margin:30px;--uk-position-margin-offset:30px}@media (min-width:1200px){.uk-position-large{margin:50px;--uk-position-margin-offset:50px}}.uk-position-relative{position:relative!important}.uk-position-absolute{position:absolute!important}.uk-position-fixed{position:fixed!important}.uk-position-sticky{position:sticky!important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}.uk-position-z-index-high{z-index:990}:where(.uk-transition-fade),:where([class*=uk-transition-scale]),:where([class*=uk-transition-slide]){--uk-position-translate-x:0;--uk-position-translate-y:0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;--uk-scale-x:1;--uk-scale-y:1;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y)) translate(var(--uk-translate-x),var(--uk-translate-y)) scale(var(--uk-scale-x),var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-active.uk-active .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle:focus-within .uk-transition-fade,.uk-transition-toggle:hover .uk-transition-fade{opacity:1}[class*=uk-transition-scale]{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x:1;--uk-scale-y:1}.uk-transition-scale-down{--uk-scale-x:1.03;--uk-scale-y:1.03}.uk-transition-active.uk-active .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle:focus-within .uk-transition-scale-up,.uk-transition-toggle:hover .uk-transition-scale-up{--uk-scale-x:1.03;--uk-scale-y:1.03;opacity:1}.uk-transition-active.uk-active .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle:focus-within .uk-transition-scale-down,.uk-transition-toggle:hover .uk-transition-scale-down{--uk-scale-x:1;--uk-scale-y:1;opacity:1}.uk-transition-slide-top{--uk-translate-y:-100%}.uk-transition-slide-bottom{--uk-translate-y:100%}.uk-transition-slide-left{--uk-translate-x:-100%}.uk-transition-slide-right{--uk-translate-x:100%}.uk-transition-slide-top-small{--uk-translate-y:calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y:10px}.uk-transition-slide-left-small{--uk-translate-x:calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x:10px}.uk-transition-slide-top-medium{--uk-translate-y:calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y:50px}.uk-transition-slide-left-medium{--uk-translate-x:calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x:50px}.uk-transition-active.uk-active [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle:focus-within [class*=uk-transition-slide],.uk-transition-toggle:hover [class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-transition-disable,.uk-transition-disable *{transition:none!important}.uk-hidden,.uk-hidden-empty:empty,[hidden]{display:none!important}@media (min-width:640px){.uk-hidden\@s{display:none!important}}@media (min-width:960px){.uk-hidden\@m{display:none!important}}@media (min-width:1200px){.uk-hidden\@l{display:none!important}}@media (min-width:1600px){.uk-hidden\@xl{display:none!important}}@media (max-width:639px){.uk-visible\@s{display:none!important}}@media (max-width:959px){.uk-visible\@m{display:none!important}}@media (max-width:1199px){.uk-visible\@l{display:none!important}}@media (max-width:1599px){.uk-visible\@xl{display:none!important}}.uk-invisible{visibility:hidden!important}.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute!important;width:0!important;height:0!important;padding:0!important;border:0!important;margin:0!important;overflow:hidden!important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0!important}@media (hover:none){.uk-hidden-touch{display:none!important}}@media (hover){.uk-hidden-notouch{display:none!important}}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-overlay-primary,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-light .uk-link,.uk-light a,.uk-offcanvas-bar .uk-link,.uk-offcanvas-bar a,.uk-overlay-primary .uk-link,.uk-overlay-primary a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a{color:#fff}.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-light .uk-link:hover,.uk-light a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-overlay-primary .uk-link:hover,.uk-overlay-primary a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover{color:#fff}.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp{color:rgba(255,255,255,.7);background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-light em,.uk-offcanvas-bar em,.uk-overlay-primary em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em{color:#fff}.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-light .uk-h1,.uk-light .uk-h2,.uk-light .uk-h3,.uk-light .uk-h4,.uk-light .uk-h5,.uk-light .uk-h6,.uk-light .uk-heading-2xlarge,.uk-light .uk-heading-3xlarge,.uk-light .uk-heading-large,.uk-light .uk-heading-medium,.uk-light .uk-heading-small,.uk-light .uk-heading-xlarge,.uk-light h1,.uk-light h2,.uk-light h3,.uk-light h4,.uk-light h5,.uk-light h6,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-3xlarge,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar h3,.uk-offcanvas-bar h4,.uk-offcanvas-bar h5,.uk-offcanvas-bar h6,.uk-overlay-primary .uk-h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .uk-h5,.uk-overlay-primary .uk-h6,.uk-overlay-primary .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-overlay-primary .uk-heading-large,.uk-overlay-primary .uk-heading-medium,.uk-overlay-primary .uk-heading-small,.uk-overlay-primary .uk-heading-xlarge,.uk-overlay-primary h1,.uk-overlay-primary h2,.uk-overlay-primary h3,.uk-overlay-primary h4,.uk-overlay-primary h5,.uk-overlay-primary h6,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h6{color:#fff}.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*=uk-card-media]) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*=uk-card-media]) blockquote,.uk-light blockquote,.uk-offcanvas-bar blockquote,.uk-overlay-primary blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote{color:#fff}.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*=uk-card-media]) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*=uk-card-media]) blockquote footer,.uk-light blockquote footer,.uk-offcanvas-bar blockquote footer,.uk-overlay-primary blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-light .uk-hr,.uk-light hr,.uk-offcanvas-bar .uk-hr,.uk-offcanvas-bar hr,.uk-overlay-primary .uk-hr,.uk-overlay-primary hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*=uk-card-media]) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*=uk-card-media]) :focus-visible,.uk-light :focus-visible,.uk-offcanvas-bar :focus-visible,.uk-overlay-primary :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible{outline-color:#fff}.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-light .uk-link-muted a,.uk-light a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-overlay-primary a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-light a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-light a.uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar a.uk-link-text:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-light a.uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover{color:#fff}.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-light .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-light .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-light .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-light .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-light .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-light .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-light .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-muted>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-card-secondary.uk-card-body .uk-list-muted>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-light .uk-list-muted>::marker,.uk-offcanvas-bar .uk-list-muted>::marker,.uk-overlay-primary .uk-list-muted>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::marker{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-list-emphasis>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-card-secondary.uk-card-body .uk-list-emphasis>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-light .uk-list-emphasis>::marker,.uk-offcanvas-bar .uk-list-emphasis>::marker,.uk-overlay-primary .uk-list-emphasis>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-primary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-card-secondary.uk-card-body .uk-list-primary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-light .uk-list-primary>::marker,.uk-offcanvas-bar .uk-list-primary>::marker,.uk-overlay-primary .uk-list-primary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-secondary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-card-secondary.uk-card-body .uk-list-secondary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-light .uk-list-secondary>::marker,.uk-offcanvas-bar .uk-list-secondary>::marker,.uk-overlay-primary .uk-list-secondary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-light .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-light .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-table th,.uk-card-primary>:not([class*=uk-card-media]) .uk-table th,.uk-card-secondary.uk-card-body .uk-table th,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table th,.uk-light .uk-table th,.uk-offcanvas-bar .uk-table th,.uk-overlay-primary .uk-table th,.uk-section-primary:not(.uk-preserve-color) .uk-table th,.uk-section-secondary:not(.uk-preserve-color) .uk-table th,.uk-tile-primary:not(.uk-preserve-color) .uk-table th,.uk-tile-secondary:not(.uk-preserve-color) .uk-table th{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-table caption,.uk-card-primary>:not([class*=uk-card-media]) .uk-table caption,.uk-card-secondary.uk-card-body .uk-table caption,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table caption,.uk-light .uk-table caption,.uk-offcanvas-bar .uk-table caption,.uk-overlay-primary .uk-table caption,.uk-section-primary:not(.uk-preserve-color) .uk-table caption,.uk-section-secondary:not(.uk-preserve-color) .uk-table caption,.uk-tile-primary:not(.uk-preserve-color) .uk-table caption,.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-primary.uk-card-body .uk-table>tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-secondary.uk-card-body .uk-table>tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-light .uk-table tbody tr.uk-active,.uk-light .uk-table>tr.uk-active,.uk-offcanvas-bar .uk-table tbody tr.uk-active,.uk-offcanvas-bar .uk-table>tr.uk-active,.uk-overlay-primary .uk-table tbody tr.uk-active,.uk-overlay-primary .uk-table>tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-primary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-light .uk-table-divider>:first-child>tr:not(:first-child),.uk-light .uk-table-divider>:not(:first-child)>tr,.uk-light .uk-table-divider>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:first-child>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:not(:first-child)>tr,.uk-offcanvas-bar .uk-table-divider>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:first-child>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:not(:first-child)>tr,.uk-overlay-primary .uk-table-divider>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-light .uk-table-striped tbody tr:nth-of-type(odd),.uk-light .uk-table-striped>tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped>tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd){background:rgba(255,255,255,.1);border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-primary.uk-card-body .uk-table-hover>tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover>tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-light .uk-table-hover tbody tr:hover,.uk-light .uk-table-hover>tr:hover,.uk-offcanvas-bar .uk-table-hover tbody tr:hover,.uk-offcanvas-bar .uk-table-hover>tr:hover,.uk-overlay-primary .uk-table-hover tbody tr:hover,.uk-overlay-primary .uk-table-hover>tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-light .uk-icon-link,.uk-offcanvas-bar .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-light .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-light .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-light .uk-icon-button,.uk-offcanvas-bar .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-light .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-light .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active{background-color:rgba(255,255,255,.2);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-light .uk-range::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-light .uk-range:active::-webkit-slider-runnable-track,.uk-light .uk-range:focus::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:active::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:focus::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range:active::-webkit-slider-runnable-track,.uk-overlay-primary .uk-range:focus::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-light .uk-range::-moz-range-track,.uk-offcanvas-bar .uk-range::-moz-range-track,.uk-overlay-primary .uk-range::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-light .uk-range:focus::-moz-range-track,.uk-offcanvas-bar .uk-range:focus::-moz-range-track,.uk-overlay-primary .uk-range:focus::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-light .uk-range::-webkit-slider-thumb,.uk-offcanvas-bar .uk-range::-webkit-slider-thumb,.uk-overlay-primary .uk-range::-webkit-slider-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb{background:grey;border-color:#e6e6e6}.uk-card-primary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-card-secondary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-light .uk-range::-moz-range-thumb,.uk-offcanvas-bar .uk-range::-moz-range-thumb,.uk-overlay-primary .uk-range::-moz-range-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb{background:grey;border-color:#e6e6e6}.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-light .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-light .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-light .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-light .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-light .uk-checkbox,.uk-light .uk-radio,.uk-offcanvas-bar .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-light .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-light .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus{background-color:#fff}.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-light .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-light .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-label,.uk-light .uk-form-label,.uk-offcanvas-bar .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label{color:#fff}.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-light .uk-form-icon,.uk-offcanvas-bar .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-light .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-light .uk-button-default,.uk-offcanvas-bar .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default{background-color:transparent;color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-light .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-light .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-light .uk-button-primary,.uk-offcanvas-bar .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-light .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-light .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-light .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-light .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-light .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-light .uk-button-text,.uk-offcanvas-bar .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text{color:#fff}.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-light .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before{border-bottom-color:#fff}.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-light .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover{color:#fff}.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-light .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-light .uk-button-link,.uk-offcanvas-bar .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link{color:#fff}.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-light .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body.uk-card-badge,.uk-card-primary>:not([class*=uk-card-media]).uk-card-badge,.uk-card-secondary.uk-card-body.uk-card-badge,.uk-card-secondary>:not([class*=uk-card-media]).uk-card-badge,.uk-light.uk-card-badge,.uk-offcanvas-bar.uk-card-badge,.uk-overlay-primary.uk-card-badge,.uk-section-primary:not(.uk-preserve-color).uk-card-badge,.uk-section-secondary:not(.uk-preserve-color).uk-card-badge,.uk-tile-primary:not(.uk-preserve-color).uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-light .uk-close,.uk-offcanvas-bar .uk-close,.uk-overlay-primary .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-light .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-light .uk-totop,.uk-offcanvas-bar .uk-totop,.uk-overlay-primary .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-light .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-light .uk-totop:active,.uk-offcanvas-bar .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active{color:#fff}.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-light .uk-marker,.uk-offcanvas-bar .uk-marker,.uk-overlay-primary .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker{background:#f8f8f8;color:#666}.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-light .uk-marker:hover,.uk-offcanvas-bar .uk-marker:hover,.uk-overlay-primary .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover{color:#666}.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-light .uk-badge,.uk-offcanvas-bar .uk-badge,.uk-overlay-primary .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge{background-color:#fff;color:#666!important}.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-light .uk-label,.uk-offcanvas-bar .uk-label,.uk-overlay-primary .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-light .uk-article-meta,.uk-offcanvas-bar .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-light .uk-search-input,.uk-offcanvas-bar .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-light .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-light .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-light .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-light .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-light .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-light .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-light .uk-search-navbar .uk-search-input:focus,.uk-offcanvas-bar .uk-search-navbar .uk-search-input:focus,.uk-overlay-primary .uk-search-navbar .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-light .uk-search-medium .uk-search-input,.uk-offcanvas-bar .uk-search-medium .uk-search-input,.uk-overlay-primary .uk-search-medium .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-light .uk-search-medium .uk-search-input:focus,.uk-offcanvas-bar .uk-search-medium .uk-search-input:focus,.uk-overlay-primary .uk-search-medium .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-light .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-light .uk-search-large .uk-search-input:focus,.uk-offcanvas-bar .uk-search-large .uk-search-input:focus,.uk-overlay-primary .uk-search-large .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-light .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-light .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-accordion-title,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-card-secondary.uk-card-body .uk-accordion-title,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-light .uk-accordion-title,.uk-offcanvas-bar .uk-accordion-title,.uk-overlay-primary .uk-accordion-title,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title{color:#fff}.uk-card-primary.uk-card-body .uk-accordion-title:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-card-secondary.uk-card-body .uk-accordion-title:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-light .uk-accordion-title:hover,.uk-offcanvas-bar .uk-accordion-title:hover,.uk-overlay-primary .uk-accordion-title:hover,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-thumbnav>*>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-thumbnav>*>::after,.uk-card-secondary.uk-card-body .uk-thumbnav>*>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-thumbnav>*>::after,.uk-light .uk-thumbnav>*>::after,.uk-offcanvas-bar .uk-thumbnav>*>::after,.uk-overlay-primary .uk-thumbnav>*>::after,.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav>*>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav>*>::after{background-image:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.4))}.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-light .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-light .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-light .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-light .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-light .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-light .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-light .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-light .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-light .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-light .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-light .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-light .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-light .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-light .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-light .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-light .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-light .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-light .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded=true],.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-light .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-light .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-light .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-light .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded=true],.uk-overlay-primary .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-light .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-light .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-light .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child{background-color:transparent;color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-light .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-light .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-light .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-light .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-light .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-light .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-light .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-light .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab::before,.uk-light .uk-tab::before,.uk-offcanvas-bar .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before{border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-light .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-light .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-light .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-light .uk-slidenav,.uk-offcanvas-bar .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-light .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-light .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-light .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*{background-color:transparent;border-color:rgba(255,255,255,.9)}.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-light .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-light .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-light .uk-text-lead,.uk-offcanvas-bar .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-light .uk-text-meta,.uk-offcanvas-bar .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-light .uk-text-muted,.uk-offcanvas-bar .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-light .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-light .uk-text-primary,.uk-offcanvas-bar .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-light .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary{color:#fff!important}.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-light .uk-column-divider,.uk-offcanvas-bar .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-light .uk-logo,.uk-offcanvas-bar .uk-logo,.uk-overlay-primary .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo{color:#fff}.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-light .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover{color:#fff}.uk-card-primary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-light .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-overlay-primary .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse){display:none}.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-light .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse{display:block}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-light .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(2n):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(2n):last-child{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-light .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-light .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}*{--uk-inverse:initial}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-overlay-primary,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){--uk-inverse:light}.uk-card-default.uk-card-body,.uk-card-default>:not([class*=uk-card-media]),.uk-dark,.uk-dropbar,.uk-dropdown,.uk-navbar-container:not(.uk-navbar-transparent),.uk-navbar-dropdown,.uk-overlay-default,.uk-section-default:not(.uk-preserve-color),.uk-section-muted:not(.uk-preserve-color),.uk-tile-default:not(.uk-preserve-color),.uk-tile-muted:not(.uk-preserve-color){--uk-inverse:dark}.uk-inverse-light{--uk-inverse:light!important}.uk-inverse-dark{--uk-inverse:dark!important}@media print{*,::after,::before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/web/static/uikit/js/uikit-icons.js b/web/static/uikit/js/uikit-icons.js new file mode 100644 index 0000000..7561955 --- /dev/null +++ b/web/static/uikit/js/uikit-icons.js @@ -0,0 +1,184 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define('uikiticons', factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkitIcons = factory()); +})(this, (function () { 'use strict'; + + function plugin(UIkit) { + if (plugin.installed) { + return; + } + UIkit.icon.add({ + "youtube": '', + "yootheme": '', + "yelp": '', + "xing": '', + "x": '', + "world": '', + "wordpress": '', + "whatsapp": '', + "warning": '', + "vimeo": '', + "video-camera": '', + "users": '', + "user": '', + "upload": '', + "unlock": '', + "uikit": '', + "twitter": '', + "twitch": '', + "tv": '', + "tumblr": '', + "tripadvisor": '', + "triangle-up": '', + "triangle-right": '', + "triangle-left": '', + "triangle-down": '', + "trash": '', + "tiktok": '', + "thumbnails": '', + "threads": '', + "telegram": '', + "tag": '', + "tablet": '', + "tablet-landscape": '', + "table": '', + "strikethrough": '', + "star": '', + "soundcloud": '', + "sorting": '', + "social": '', + "signal": '', + "sign-out": '', + "sign-in": '', + "shrink": '', + "settings": '', + "server": '', + "search": '', + "rss": '', + "reply": '', + "refresh": '', + "reddit": '', + "receiver": '', + "quote-right": '', + "question": '', + "push": '', + "pull": '', + "print": '', + "plus": '', + "plus-circle": '', + "play": '', + "play-circle": '', + "pinterest": '', + "phone": '', + "phone-landscape": '', + "pencil": '', + "paint-bucket": '', + "nut": '', + "move": '', + "more": '', + "more-vertical": '', + "minus": '', + "minus-circle": '', + "microsoft": '', + "microphone": '', + "menu": '', + "mastodon": '', + "mail": '', + "lock": '', + "location": '', + "list": '', + "linkedin": '', + "link": '', + "link-external": '', + "lifesaver": '', + "laptop": '', + "joomla": '', + "italic": '', + "instagram": '', + "info": '', + "image": '', + "home": '', + "history": '', + "heart": '', + "hashtag": '', + "happy": '', + "grid": '', + "google": '', + "gitter": '', + "github": '', + "github-alt": '', + "git-fork": '', + "git-branch": '', + "future": '', + "foursquare": '', + "forward": '', + "folder": '', + "flickr": '', + "file": '', + "file-text": '', + "file-pdf": '', + "file-edit": '', + "facebook": '', + "eye": '', + "eye-slash": '', + "expand": '', + "etsy": '', + "dribbble": '', + "download": '', + "discord": '', + "desktop": '', + "database": '', + "crosshairs": '', + "credit-card": '', + "copy": '', + "comments": '', + "commenting": '', + "comment": '', + "cog": '', + "code": '', + "cloud-upload": '', + "cloud-download": '', + "close": '', + "close-circle": '', + "clock": '', + "chevron-up": '', + "chevron-right": '', + "chevron-left": '', + "chevron-down": '', + "chevron-double-right": '', + "chevron-double-left": '', + "check": '', + "cart": '', + "camera": '', + "calendar": '', + "bookmark": '', + "bolt": '', + "bold": '', + "bluesky": '', + "bell": '', + "behance": '', + "ban": '', + "bag": '', + "arrow-up": '', + "arrow-up-right": '', + "arrow-right": '', + "arrow-left": '', + "arrow-down": '', + "arrow-down-arrow-up": '', + "apple": '', + "android": '', + "android-robot": '', + "album": '', + "500px": '' + }); + } + if (typeof window !== "undefined" && window.UIkit) { + window.UIkit.use(plugin); + } + + return plugin; + +})); diff --git a/web/static/uikit/js/uikit-icons.min.js b/web/static/uikit/js/uikit-icons.min.js new file mode 100644 index 0000000..6493feb --- /dev/null +++ b/web/static/uikit/js/uikit-icons.min.js @@ -0,0 +1 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */(function(e,i){typeof exports=="object"&&typeof module<"u"?module.exports=i():typeof define=="function"&&define.amd?define("uikiticons",i):(e=typeof globalThis<"u"?globalThis:e||self,e.UIkitIcons=i())})(this,function(){"use strict";function e(i){e.installed||i.icon.add({youtube:'',yootheme:'',yelp:'',xing:'',x:'',world:'',wordpress:'',whatsapp:'',warning:'',vimeo:'',"video-camera":'',users:'',user:'',upload:'',unlock:'',uikit:'',twitter:'',twitch:'',tv:'',tumblr:'',tripadvisor:'',"triangle-up":'',"triangle-right":'',"triangle-left":'',"triangle-down":'',trash:'',tiktok:'',thumbnails:'',threads:'',telegram:'',tag:'',tablet:'',"tablet-landscape":'',table:'',strikethrough:'',star:'',soundcloud:'',sorting:'',social:'',signal:'',"sign-out":'',"sign-in":'',shrink:'',settings:'',server:'',search:'',rss:'',reply:'',refresh:'',reddit:'',receiver:'',"quote-right":'',question:'',push:'',pull:'',print:'',plus:'',"plus-circle":'',play:'',"play-circle":'',pinterest:'',phone:'',"phone-landscape":'',pencil:'',"paint-bucket":'',nut:'',move:'',more:'',"more-vertical":'',minus:'',"minus-circle":'',microsoft:'',microphone:'',menu:'',mastodon:'',mail:'',lock:'',location:'',list:'',linkedin:'',link:'',"link-external":'',lifesaver:'',laptop:'',joomla:'',italic:'',instagram:'',info:'',image:'',home:'',history:'',heart:'',hashtag:'',happy:'',grid:'',google:'',gitter:'',github:'',"github-alt":'',"git-fork":'',"git-branch":'',future:'',foursquare:'',forward:'',folder:'',flickr:'',file:'',"file-text":'',"file-pdf":'',"file-edit":'',facebook:'',eye:'',"eye-slash":'',expand:'',etsy:'',dribbble:'',download:'',discord:'',desktop:'',database:'',crosshairs:'',"credit-card":'',copy:'',comments:'',commenting:'',comment:'',cog:'',code:'',"cloud-upload":'',"cloud-download":'',close:'',"close-circle":'',clock:'',"chevron-up":'',"chevron-right":'',"chevron-left":'',"chevron-down":'',"chevron-double-right":'',"chevron-double-left":'',check:'',cart:'',camera:'',calendar:'',bookmark:'',bolt:'',bold:'',bluesky:'',bell:'',behance:'',ban:'',bag:'',"arrow-up":'',"arrow-up-right":'',"arrow-right":'',"arrow-left":'',"arrow-down":'',"arrow-down-arrow-up":'',apple:'',android:'',"android-robot":'',album:'',"500px":''})}return typeof window<"u"&&window.UIkit&&window.UIkit.use(e),e}); diff --git a/web/static/uikit/js/uikit.js b/web/static/uikit/js/uikit.js new file mode 100644 index 0000000..a718b50 --- /dev/null +++ b/web/static/uikit/js/uikit.js @@ -0,0 +1,9955 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define('uikit', factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkit = factory()); +})(this, (function () { 'use strict'; + + const { hasOwnProperty, toString } = Object.prototype; + function hasOwn(obj, key) { + return hasOwnProperty.call(obj, key); + } + const hyphenateRe = /\B([A-Z])/g; + const hyphenate = memoize((str) => str.replace(hyphenateRe, "-$1").toLowerCase()); + const camelizeRe = /-(\w)/g; + const camelize = memoize( + (str) => (str.charAt(0).toLowerCase() + str.slice(1)).replace(camelizeRe, (_, c) => c.toUpperCase()) + ); + const ucfirst = memoize((str) => str.charAt(0).toUpperCase() + str.slice(1)); + function startsWith(str, search) { + var _a; + return (_a = str == null ? void 0 : str.startsWith) == null ? void 0 : _a.call(str, search); + } + function endsWith(str, search) { + var _a; + return (_a = str == null ? void 0 : str.endsWith) == null ? void 0 : _a.call(str, search); + } + function includes(obj, search) { + var _a; + return (_a = obj == null ? void 0 : obj.includes) == null ? void 0 : _a.call(obj, search); + } + function findIndex(array, predicate) { + var _a; + return (_a = array == null ? void 0 : array.findIndex) == null ? void 0 : _a.call(array, predicate); + } + const { isArray, from: toArray } = Array; + const { assign } = Object; + function isFunction(obj) { + return typeof obj === "function"; + } + function isObject(obj) { + return obj !== null && typeof obj === "object"; + } + function isPlainObject(obj) { + return toString.call(obj) === "[object Object]"; + } + function isWindow(obj) { + return isObject(obj) && obj === obj.window; + } + function isDocument(obj) { + return nodeType(obj) === 9; + } + function isNode(obj) { + return nodeType(obj) >= 1; + } + function isElement(obj) { + return nodeType(obj) === 1; + } + function nodeType(obj) { + return !isWindow(obj) && isObject(obj) && obj.nodeType; + } + function isBoolean(value) { + return typeof value === "boolean"; + } + function isString(value) { + return typeof value === "string"; + } + function isNumber(value) { + return typeof value === "number"; + } + function isNumeric(value) { + return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value)); + } + function isEmpty(obj) { + return !(isArray(obj) ? obj.length : isObject(obj) ? Object.keys(obj).length : false); + } + function isUndefined(value) { + return value === void 0; + } + function toBoolean(value) { + return isBoolean(value) ? value : value === "true" || value === "1" || value === "" ? true : value === "false" || value === "0" ? false : value; + } + function toNumber(value) { + const number = Number(value); + return isNaN(number) ? false : number; + } + function toFloat(value) { + return parseFloat(value) || 0; + } + function toNode(element) { + return element && toNodes(element)[0]; + } + function toNodes(element) { + return isNode(element) ? [element] : Array.from(element || []).filter(isNode); + } + function toWindow(element) { + if (isWindow(element)) { + return element; + } + element = toNode(element); + const document = isDocument(element) ? element : element == null ? void 0 : element.ownerDocument; + return (document == null ? void 0 : document.defaultView) || window; + } + function isEqual(value, other) { + return value === other || isObject(value) && isObject(other) && Object.keys(value).length === Object.keys(other).length && each(value, (val, key) => val === other[key]); + } + function swap(value, a, b) { + return value.replace(new RegExp(`${a}|${b}`, "g"), (match) => match === a ? b : a); + } + function last(array) { + return array[array.length - 1]; + } + function each(obj, cb) { + for (const key in obj) { + if (false === cb(obj[key], key)) { + return false; + } + } + return true; + } + function sortBy(array, prop) { + return array.slice().sort( + ({ [prop]: propA = 0 }, { [prop]: propB = 0 }) => propA > propB ? 1 : propB > propA ? -1 : 0 + ); + } + function sumBy(array, iteratee) { + return array.reduce( + (sum, item) => sum + toFloat(isFunction(iteratee) ? iteratee(item) : item[iteratee]), + 0 + ); + } + function uniqueBy(array, prop) { + const seen = /* @__PURE__ */ new Set(); + return array.filter(({ [prop]: check }) => seen.has(check) ? false : seen.add(check)); + } + function pick(obj, props) { + return props.reduce((res, prop) => ({ ...res, [prop]: obj[prop] }), {}); + } + function clamp(number, min = 0, max = 1) { + return Math.min(Math.max(toNumber(number) || 0, min), max); + } + function noop() { + } + function intersectRect(...rects) { + return [ + ["bottom", "top"], + ["right", "left"] + ].every( + ([minProp, maxProp]) => Math.min(...rects.map(({ [minProp]: min }) => min)) - Math.max(...rects.map(({ [maxProp]: max }) => max)) > 0 + ); + } + function pointInRect(point, rect) { + return point.x <= rect.right && point.x >= rect.left && point.y <= rect.bottom && point.y >= rect.top; + } + function ratio(dimensions, prop, value) { + const aProp = prop === "width" ? "height" : "width"; + return { + [aProp]: dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp], + [prop]: value + }; + } + function contain(dimensions, maxDimensions) { + dimensions = { ...dimensions }; + for (const prop in dimensions) { + dimensions = dimensions[prop] > maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions; + } + return dimensions; + } + function cover$1(dimensions, maxDimensions) { + dimensions = contain(dimensions, maxDimensions); + for (const prop in dimensions) { + dimensions = dimensions[prop] < maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions; + } + return dimensions; + } + const Dimensions = { ratio, contain, cover: cover$1 }; + function getIndex(i, elements, current = 0, finite = false) { + elements = toNodes(elements); + const { length } = elements; + if (!length) { + return -1; + } + i = isNumeric(i) ? toNumber(i) : i === "next" ? current + 1 : i === "previous" ? current - 1 : i === "last" ? length - 1 : elements.indexOf(toNode(i)); + if (finite) { + return clamp(i, 0, length - 1); + } + i %= length; + return i < 0 ? i + length : i; + } + function memoize(fn) { + const cache = /* @__PURE__ */ Object.create(null); + return (key, ...args) => cache[key] || (cache[key] = fn(key, ...args)); + } + + function addClass(element, ...classes) { + for (const node of toNodes(element)) { + const add = toClasses(classes).filter((cls) => !hasClass(node, cls)); + if (add.length) { + node.classList.add(...add); + } + } + } + function removeClass(element, ...classes) { + for (const node of toNodes(element)) { + const remove = toClasses(classes).filter((cls) => hasClass(node, cls)); + if (remove.length) { + node.classList.remove(...remove); + } + } + } + function replaceClass(element, oldClass, newClass) { + newClass = toClasses(newClass); + oldClass = toClasses(oldClass).filter((cls) => !includes(newClass, cls)); + removeClass(element, oldClass); + addClass(element, newClass); + } + function hasClass(element, cls) { + [cls] = toClasses(cls); + return toNodes(element).some((node) => node.classList.contains(cls)); + } + function toggleClass(element, cls, force) { + const classes = toClasses(cls); + if (!isUndefined(force)) { + force = !!force; + } + for (const node of toNodes(element)) { + for (const cls2 of classes) { + node.classList.toggle(cls2, force); + } + } + } + function toClasses(str) { + return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(" ").filter(Boolean) : []; + } + + function attr(element, name, value) { + var _a; + if (isObject(name)) { + for (const key in name) { + attr(element, key, name[key]); + } + return; + } + if (isUndefined(value)) { + return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name); + } else { + for (const el of toNodes(element)) { + if (isFunction(value)) { + value = value.call(el, attr(el, name)); + } + if (value === null) { + removeAttr(el, name); + } else { + el.setAttribute(name, value); + } + } + } + } + function hasAttr(element, name) { + return toNodes(element).some((element2) => element2.hasAttribute(name)); + } + function removeAttr(element, name) { + toNodes(element).forEach((element2) => element2.removeAttribute(name)); + } + function data(element, attribute) { + for (const name of [attribute, `data-${attribute}`]) { + if (hasAttr(element, name)) { + return attr(element, name); + } + } + } + + const inBrowser = typeof window !== "undefined"; + const isRtl = inBrowser && document.dir === "rtl"; + const hasTouch = inBrowser && "ontouchstart" in window; + const hasPointerEvents = inBrowser && window.PointerEvent; + const pointerDown$1 = hasPointerEvents ? "pointerdown" : hasTouch ? "touchstart" : "mousedown"; + const pointerMove$1 = hasPointerEvents ? "pointermove" : hasTouch ? "touchmove" : "mousemove"; + const pointerUp$1 = hasPointerEvents ? "pointerup" : hasTouch ? "touchend" : "mouseup"; + const pointerEnter = hasPointerEvents ? "pointerenter" : hasTouch ? "" : "mouseenter"; + const pointerLeave = hasPointerEvents ? "pointerleave" : hasTouch ? "" : "mouseleave"; + const pointerCancel = hasPointerEvents ? "pointercancel" : "touchcancel"; + + const voidElements = { + area: true, + base: true, + br: true, + col: true, + embed: true, + hr: true, + img: true, + input: true, + keygen: true, + link: true, + meta: true, + param: true, + source: true, + track: true, + wbr: true + }; + function isVoidElement(element) { + return toNodes(element).some((element2) => voidElements[element2.tagName.toLowerCase()]); + } + const isVisibleFn = inBrowser && Element.prototype.checkVisibility || function() { + return this.offsetWidth || this.offsetHeight || this.getClientRects().length; + }; + function isVisible(element) { + return toNodes(element).some((element2) => isVisibleFn.call(element2)); + } + const selInput = "input,select,textarea,button"; + function isInput(element) { + return toNodes(element).some((element2) => matches(element2, selInput)); + } + const selFocusable = `${selInput},a[href],[tabindex]`; + function isFocusable(element) { + return matches(element, selFocusable); + } + function parent(element) { + var _a; + return (_a = toNode(element)) == null ? void 0 : _a.parentElement; + } + function filter$1(element, selector) { + return toNodes(element).filter((element2) => matches(element2, selector)); + } + function matches(element, selector) { + return toNodes(element).some((element2) => element2.matches(selector)); + } + function parents(element, selector) { + const elements = []; + while (element = parent(element)) { + if (!selector || matches(element, selector)) { + elements.push(element); + } + } + return elements; + } + function children(element, selector) { + element = toNode(element); + const children2 = element ? toArray(element.children) : []; + return selector ? filter$1(children2, selector) : children2; + } + function index(element, ref) { + return ref ? toNodes(element).indexOf(toNode(ref)) : children(parent(element)).indexOf(element); + } + function isSameSiteAnchor(el) { + el = toNode(el); + return el && ["origin", "pathname", "search"].every((part) => el[part] === location[part]); + } + function getTargetedElement(el) { + if (isSameSiteAnchor(el)) { + const { hash, ownerDocument } = toNode(el); + const id = decodeURIComponent(hash).slice(1); + return id ? ownerDocument.getElementById(id) || ownerDocument.getElementsByName(id)[0] : ownerDocument.documentElement; + } + } + + function query(selector, context) { + return find(selector, getContext(selector, context)); + } + function queryAll(selector, context) { + return findAll(selector, getContext(selector, context)); + } + function find(selector, context) { + return toNode(_query(selector, toNode(context), "querySelector")); + } + function findAll(selector, context) { + return toNodes(_query(selector, toNode(context), "querySelectorAll")); + } + function getContext(selector, context = document) { + return isDocument(context) || parseSelector(selector).isContextSelector ? context : context.ownerDocument; + } + const addStarRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g; + const splitSelectorRe = /(\([^)]*\)|[^,])+/g; + const parseSelector = memoize((selector) => { + let isContextSelector = false; + if (!selector || !isString(selector)) { + return {}; + } + const selectors = []; + for (let sel of selector.match(splitSelectorRe)) { + sel = sel.trim().replace(addStarRe, "$1 *"); + isContextSelector || (isContextSelector = ["!", "+", "~", "-", ">"].includes(sel[0])); + selectors.push(sel); + } + return { + selector: selectors.join(","), + selectors, + isContextSelector + }; + }); + const positionRe = /(\([^)]*\)|\S)*/; + const parsePositionSelector = memoize((selector) => { + selector = selector.slice(1).trim(); + const [position] = selector.match(positionRe); + return [position, selector.slice(position.length + 1)]; + }); + function _query(selector, context = document, queryFn) { + var _a; + const parsed = parseSelector(selector); + if (!parsed.isContextSelector) { + return parsed.selector ? _doQuery(context, queryFn, parsed.selector) : selector; + } + selector = ""; + const isSingle = parsed.selectors.length === 1; + for (let sel of parsed.selectors) { + let positionSel; + let ctx = context; + if (sel[0] === "!") { + [positionSel, sel] = parsePositionSelector(sel); + ctx = (_a = context.parentElement) == null ? void 0 : _a.closest(positionSel); + if (!sel && isSingle) { + return ctx; + } + } + if (ctx && sel[0] === "-") { + [positionSel, sel] = parsePositionSelector(sel); + ctx = ctx.previousElementSibling; + ctx = matches(ctx, positionSel) ? ctx : null; + if (!sel && isSingle) { + return ctx; + } + } + if (!ctx) { + continue; + } + if (isSingle) { + if (sel[0] === "~" || sel[0] === "+") { + sel = `:scope > :nth-child(${index(ctx) + 1}) ${sel}`; + ctx = ctx.parentElement; + } else if (sel[0] === ">") { + sel = `:scope ${sel}`; + } + return _doQuery(ctx, queryFn, sel); + } + selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`; + } + if (!isDocument(context)) { + context = context.ownerDocument; + } + return _doQuery(context, queryFn, selector); + } + function _doQuery(context, queryFn, selector) { + try { + return context[queryFn](selector); + } catch (e) { + return null; + } + } + function domPath(element) { + const names = []; + while (element.parentNode) { + const id = attr(element, "id"); + if (id) { + names.unshift(`#${escape(id)}`); + break; + } else { + let { tagName } = element; + if (tagName !== "HTML") { + tagName += `:nth-child(${index(element) + 1})`; + } + names.unshift(tagName); + element = element.parentNode; + } + } + return names.join(" > "); + } + function escape(css) { + return isString(css) ? CSS.escape(css) : ""; + } + + function on(...args) { + let [targets, types, selector, listener, useCapture = false] = getArgs(args); + if (listener.length > 1) { + listener = detail(listener); + } + if (useCapture == null ? void 0 : useCapture.self) { + listener = selfFilter(listener); + } + if (selector) { + listener = delegate(selector, listener); + } + for (const type of types) { + for (const target of targets) { + target.addEventListener(type, listener, useCapture); + } + } + return () => off(targets, types, listener, useCapture); + } + function off(...args) { + let [targets, types, , listener, useCapture = false] = getArgs(args); + for (const type of types) { + for (const target of targets) { + target.removeEventListener(type, listener, useCapture); + } + } + } + function once(...args) { + const [element, types, selector, listener, useCapture = false, condition] = getArgs(args); + const off2 = on( + element, + types, + selector, + (e) => { + const result = !condition || condition(e); + if (result) { + off2(); + listener(e, result); + } + }, + useCapture + ); + return off2; + } + function trigger(targets, event, detail2) { + return toEventTargets(targets).every( + (target) => target.dispatchEvent(createEvent(event, true, true, detail2)) + ); + } + function createEvent(e, bubbles = true, cancelable = false, detail2) { + if (isString(e)) { + e = new CustomEvent(e, { bubbles, cancelable, detail: detail2 }); + } + return e; + } + function getArgs(args) { + args[0] = toEventTargets(args[0]); + if (isString(args[1])) { + args[1] = args[1].split(" "); + } + if (isFunction(args[2])) { + args.splice(2, 0, false); + } + return args; + } + function delegate(selector, listener) { + return (e) => { + const current = selector[0] === ">" ? findAll(selector, e.currentTarget).reverse().find((element) => element.contains(e.target)) : e.target.closest(selector); + if (current) { + e.current = current; + listener.call(this, e); + delete e.current; + } + }; + } + function detail(listener) { + return (e) => isArray(e.detail) ? listener(e, ...e.detail) : listener(e); + } + function selfFilter(listener) { + return function(e) { + if (e.target === e.currentTarget || e.target === e.current) { + return listener.call(null, e); + } + }; + } + function isEventTarget(target) { + return target && "addEventListener" in target; + } + function toEventTarget(target) { + return isEventTarget(target) ? target : toNode(target); + } + function toEventTargets(target) { + return isArray(target) ? target.map(toEventTarget).filter(Boolean) : isString(target) ? findAll(target) : isEventTarget(target) ? [target] : toNodes(target); + } + function isTouch(e) { + return e.pointerType === "touch" || !!e.touches; + } + function getEventPos(e) { + var _a, _b; + const { clientX: x, clientY: y } = ((_a = e.touches) == null ? void 0 : _a[0]) || ((_b = e.changedTouches) == null ? void 0 : _b[0]) || e; + return { x, y }; + } + + const cssNumber = { + "animation-iteration-count": true, + "column-count": true, + "fill-opacity": true, + "flex-grow": true, + "flex-shrink": true, + "font-weight": true, + "line-height": true, + opacity: true, + order: true, + orphans: true, + "stroke-dasharray": true, + "stroke-dashoffset": true, + widows: true, + "z-index": true, + zoom: true + }; + function css(element, property, value, priority) { + const elements = toNodes(element); + for (const element2 of elements) { + if (isString(property)) { + property = propName(property); + if (isUndefined(value)) { + return getComputedStyle(element2).getPropertyValue(property); + } else { + element2.style.setProperty( + property, + isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "", + priority + ); + } + } else if (isArray(property)) { + const props = {}; + for (const prop of property) { + props[prop] = css(element2, prop); + } + return props; + } else if (isObject(property)) { + for (const prop in property) { + css(element2, prop, property[prop], value); + } + } + } + return elements[0]; + } + function resetProps(element, props) { + for (const prop in props) { + css(element, prop, ""); + } + } + const propName = memoize((name) => { + if (isCustomProperty(name)) { + return name; + } + name = hyphenate(name); + const { style } = document.documentElement; + if (name in style) { + return name; + } + for (const prefix of ["webkit", "moz"]) { + const prefixedName = `-${prefix}-${name}`; + if (prefixedName in style) { + return prefixedName; + } + } + }); + function isCustomProperty(name) { + return startsWith(name, "--"); + } + + const clsTransition = "uk-transition"; + const transitionEnd = "transitionend"; + const transitionCanceled = "transitioncanceled"; + function transition$1(element, props, duration = 400, timing = "linear") { + duration = Math.round(duration); + return Promise.all( + toNodes(element).map( + (element2) => new Promise((resolve, reject) => { + for (const name in props) { + css(element2, name); + } + const timer = setTimeout(() => trigger(element2, transitionEnd), duration); + once( + element2, + [transitionEnd, transitionCanceled], + ({ type }) => { + clearTimeout(timer); + removeClass(element2, clsTransition); + resetProps(element2, transitionProps); + type === transitionCanceled ? reject() : resolve(element2); + }, + { self: true } + ); + addClass(element2, clsTransition); + const transitionProps = { + transitionProperty: Object.keys(props).map(propName).join(","), + transitionDuration: `${duration}ms`, + transitionTimingFunction: timing + }; + css(element2, { ...transitionProps, ...props }); + }) + ) + ); + } + const Transition = { + start: transition$1, + async stop(element) { + trigger(element, transitionEnd); + await Promise.resolve(); + }, + async cancel(element) { + trigger(element, transitionCanceled); + await Promise.resolve(); + }, + inProgress(element) { + return hasClass(element, clsTransition); + } + }; + const clsAnimation = "uk-animation"; + const animationEnd = "animationend"; + const animationCanceled = "animationcanceled"; + function animate$2(element, animation, duration = 200, origin, out) { + return Promise.all( + toNodes(element).map( + (element2) => new Promise((resolve, reject) => { + if (hasClass(element2, clsAnimation)) { + trigger(element2, animationCanceled); + } + const classes = [ + animation, + clsAnimation, + `${clsAnimation}-${out ? "leave" : "enter"}`, + origin && `uk-transform-origin-${origin}`, + out && `${clsAnimation}-reverse` + ]; + const timer = setTimeout(() => trigger(element2, animationEnd), duration); + once( + element2, + [animationEnd, animationCanceled], + ({ type }) => { + clearTimeout(timer); + type === animationCanceled ? reject() : resolve(element2); + css(element2, "animationDuration", ""); + removeClass(element2, classes); + }, + { self: true } + ); + css(element2, "animationDuration", `${duration}ms`); + addClass(element2, classes); + }) + ) + ); + } + const Animation = { + in: animate$2, + out(element, animation, duration, origin) { + return animate$2(element, animation, duration, origin, true); + }, + inProgress(element) { + return hasClass(element, clsAnimation); + }, + cancel(element) { + trigger(element, animationCanceled); + } + }; + + function ready(fn) { + if (document.readyState !== "loading") { + fn(); + return; + } + once(document, "DOMContentLoaded", fn); + } + function isTag(element, ...tagNames) { + return tagNames.some((tagName) => { + var _a; + return ((_a = element == null ? void 0 : element.tagName) == null ? void 0 : _a.toLowerCase()) === tagName.toLowerCase(); + }); + } + function empty(element) { + element = $(element); + if (element) { + element.innerHTML = ""; + } + return element; + } + function html(parent2, html2) { + return isUndefined(html2) ? $(parent2).innerHTML : append(empty(parent2), html2); + } + const prepend = applyFn("prepend"); + const append = applyFn("append"); + const before = applyFn("before"); + const after = applyFn("after"); + function applyFn(fn) { + return function(ref, element) { + var _a; + const nodes = toNodes(isString(element) ? fragment(element) : element); + (_a = $(ref)) == null ? void 0 : _a[fn](...nodes); + return unwrapSingle(nodes); + }; + } + function remove$1(element) { + toNodes(element).forEach((element2) => element2.remove()); + } + function wrapAll(element, structure) { + structure = toNode(before(element, structure)); + while (structure.firstElementChild) { + structure = structure.firstElementChild; + } + append(structure, element); + return structure; + } + function wrapInner(element, structure) { + return toNodes( + toNodes(element).map( + (element2) => element2.hasChildNodes() ? wrapAll(toArray(element2.childNodes), structure) : append(element2, structure) + ) + ); + } + function unwrap(element) { + toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes)); + } + const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/; + function fragment(html2) { + const matches = singleTagRe.exec(html2); + if (matches) { + return document.createElement(matches[1]); + } + const container = document.createElement("template"); + container.innerHTML = html2.trim(); + return unwrapSingle(container.content.childNodes); + } + function unwrapSingle(nodes) { + return nodes.length > 1 ? nodes : nodes[0]; + } + function apply(node, fn) { + if (!isElement(node)) { + return; + } + fn(node); + node = node.firstElementChild; + while (node) { + apply(node, fn); + node = node.nextElementSibling; + } + } + function $(selector, context) { + return isHtml(selector) ? toNode(fragment(selector)) : find(selector, context); + } + function $$(selector, context) { + return isHtml(selector) ? toNodes(fragment(selector)) : findAll(selector, context); + } + function isHtml(str) { + return isString(str) && startsWith(str.trim(), "<"); + } + + const dirs$1 = { + width: ["left", "right"], + height: ["top", "bottom"] + }; + function dimensions$1(element) { + const rect = isElement(element) ? toNode(element).getBoundingClientRect() : { height: height(element), width: width(element), top: 0, left: 0 }; + return { + height: rect.height, + width: rect.width, + top: rect.top, + left: rect.left, + bottom: rect.top + rect.height, + right: rect.left + rect.width + }; + } + function offset(element, coordinates) { + if (coordinates) { + css(element, { left: 0, top: 0 }); + } + const currentOffset = dimensions$1(element); + if (element) { + const { scrollY, scrollX } = toWindow(element); + const offsetBy = { height: scrollY, width: scrollX }; + for (const dir in dirs$1) { + for (const prop of dirs$1[dir]) { + currentOffset[prop] += offsetBy[dir]; + } + } + } + if (!coordinates) { + return currentOffset; + } + for (const prop of ["left", "top"]) { + css(element, prop, coordinates[prop] - currentOffset[prop]); + } + } + function position(element) { + let { top, left } = offset(element); + const { + ownerDocument: { body, documentElement }, + offsetParent + } = toNode(element); + let parent = offsetParent || documentElement; + while (parent && (parent === body || parent === documentElement) && css(parent, "position") === "static") { + parent = parent.parentNode; + } + if (isElement(parent)) { + const parentOffset = offset(parent); + top -= parentOffset.top + toFloat(css(parent, "borderTopWidth")); + left -= parentOffset.left + toFloat(css(parent, "borderLeftWidth")); + } + return { + top: top - toFloat(css(element, "marginTop")), + left: left - toFloat(css(element, "marginLeft")) + }; + } + function offsetPosition(element) { + element = toNode(element); + const offset2 = [element.offsetTop, element.offsetLeft]; + while (element = element.offsetParent) { + offset2[0] += element.offsetTop + toFloat(css(element, "borderTopWidth")); + offset2[1] += element.offsetLeft + toFloat(css(element, "borderLeftWidth")); + if (css(element, "position") === "fixed") { + const win = toWindow(element); + offset2[0] += win.scrollY; + offset2[1] += win.scrollX; + return offset2; + } + } + return offset2; + } + const height = dimension("height"); + const width = dimension("width"); + function dimension(prop) { + const propName = ucfirst(prop); + return (element, value) => { + if (isUndefined(value)) { + if (isWindow(element)) { + return element[`inner${propName}`]; + } + if (isDocument(element)) { + const doc = element.documentElement; + return Math.max(doc[`offset${propName}`], doc[`scroll${propName}`]); + } + element = toNode(element); + value = css(element, prop); + value = value === "auto" ? element[`offset${propName}`] : toFloat(value) || 0; + return value - boxModelAdjust(element, prop); + } else { + return css( + element, + prop, + !value && value !== 0 ? "" : +value + boxModelAdjust(element, prop) + "px" + ); + } + }; + } + function boxModelAdjust(element, prop, sizing = "border-box") { + return css(element, "boxSizing") === sizing ? sumBy( + dirs$1[prop], + (prop2) => toFloat(css(element, `padding-${prop2}`)) + toFloat(css(element, `border-${prop2}-width`)) + ) : 0; + } + function flipPosition(pos) { + for (const dir in dirs$1) { + for (const i in dirs$1[dir]) { + if (dirs$1[dir][i] === pos) { + return dirs$1[dir][1 - i]; + } + } + } + return pos; + } + function toPx(value, property = "width", element = window, offsetDim = false) { + if (!isString(value)) { + return toFloat(value); + } + return sumBy(parseCalc(value), (value2) => { + const unit = parseUnit(value2); + return unit ? percent( + unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions$1(element)[property], + value2 + ) : value2; + }); + } + const calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g; + const parseCalc = memoize((calc) => calc.toString().replace(/\s/g, "").match(calcRe) || []); + const unitRe$1 = /(?:v[hw]|%)$/; + const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]); + function percent(base, value) { + return base * toFloat(value) / 100; + } + let vh; + let vhEl; + function getViewportHeight() { + if (vh) { + return vh; + } + if (!vhEl) { + vhEl = $("
"); + css(vhEl, { + height: "100vh", + position: "fixed" + }); + on(window, "resize", () => vh = null); + } + append(document.body, vhEl); + vh = vhEl.clientHeight; + remove$1(vhEl); + return vh; + } + + const fastdom = { read, write, clear, flush }; + const reads = []; + const writes = []; + function read(task) { + reads.push(task); + scheduleFlush(); + return task; + } + function write(task) { + writes.push(task); + scheduleFlush(); + return task; + } + function clear(task) { + remove(reads, task); + remove(writes, task); + } + let scheduled = false; + function flush() { + runTasks(reads); + runTasks(writes.splice(0)); + scheduled = false; + if (reads.length || writes.length) { + scheduleFlush(); + } + } + function scheduleFlush() { + if (!scheduled) { + scheduled = true; + queueMicrotask(flush); + } + } + function runTasks(tasks) { + let task; + while (task = tasks.shift()) { + try { + task(); + } catch (e) { + console.error(e); + } + } + } + function remove(array, item) { + const index = array.indexOf(item); + return ~index && array.splice(index, 1); + } + + class MouseTracker { + init() { + this.positions = []; + let position; + this.unbind = on(document, "mousemove", (e) => position = getEventPos(e)); + this.interval = setInterval(() => { + if (!position) { + return; + } + this.positions.push(position); + if (this.positions.length > 5) { + this.positions.shift(); + } + }, 50); + } + cancel() { + var _a; + (_a = this.unbind) == null ? void 0 : _a.call(this); + clearInterval(this.interval); + } + movesTo(target) { + if (!this.positions || this.positions.length < 2) { + return false; + } + const p = dimensions$1(target); + const { left, right, top, bottom } = p; + const [prevPosition] = this.positions; + const position = last(this.positions); + const path = [prevPosition, position]; + if (pointInRect(position, p)) { + return false; + } + const diagonals = [ + [ + { x: left, y: top }, + { x: right, y: bottom } + ], + [ + { x: left, y: bottom }, + { x: right, y: top } + ] + ]; + return diagonals.some((diagonal) => { + const intersection = intersect(path, diagonal); + return intersection && pointInRect(intersection, p); + }); + } + } + function intersect([{ x: x1, y: y1 }, { x: x2, y: y2 }], [{ x: x3, y: y3 }, { x: x4, y: y4 }]) { + const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + if (denominator === 0) { + return false; + } + const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator; + if (ua < 0) { + return false; + } + return { x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1) }; + } + + function observeIntersection(targets, cb, options = {}, { intersecting = true } = {}) { + const observer = new IntersectionObserver( + intersecting ? (entries, observer2) => { + if (entries.some((entry) => entry.isIntersecting)) { + cb(entries, observer2); + } + } : cb, + options + ); + for (const el of toNodes(targets)) { + observer.observe(el); + } + return observer; + } + const hasResizeObserver = inBrowser && window.ResizeObserver; + function observeResize(targets, cb, options = { box: "border-box" }) { + if (hasResizeObserver) { + return observe$1(ResizeObserver, targets, cb, options); + } + const off = [on(window, "load resize", cb), on(document, "loadedmetadata load", cb, true)]; + return { disconnect: () => off.map((cb2) => cb2()) }; + } + function observeViewportResize(cb) { + return { disconnect: on([window, window.visualViewport], "resize", cb) }; + } + function observeMutation(targets, cb, options) { + return observe$1(MutationObserver, targets, cb, options); + } + function observe$1(Observer, targets, cb, options) { + const observer = new Observer(cb); + for (const el of toNodes(targets)) { + observer.observe(el, options); + } + return observer; + } + + function play(el) { + if (isIFrame(el)) { + call(el, { func: "playVideo", method: "play" }); + } + if (isHTML5(el)) { + el.play().catch(noop); + } + } + function pause(el) { + if (isIFrame(el)) { + call(el, { func: "pauseVideo", method: "pause" }); + } + if (isHTML5(el)) { + el.pause(); + } + } + function mute(el) { + if (isIFrame(el)) { + call(el, { func: "mute", method: "setVolume", value: 0 }); + } + if (isHTML5(el)) { + el.muted = true; + } + } + function isHTML5(el) { + return isTag(el, "video"); + } + function isIFrame(el) { + return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el)); + } + function isYoutube(el) { + return !!el.src.match( + /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/ + ); + } + function isVimeo(el) { + return !!el.src.match(/vimeo\.com\/video\/.*/); + } + async function call(el, cmd) { + await enableApi(el); + post(el, cmd); + } + function post(el, cmd) { + el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*"); + } + const stateKey = "_ukPlayer"; + let counter = 0; + function enableApi(el) { + if (el[stateKey]) { + return el[stateKey]; + } + const youtube = isYoutube(el); + const vimeo = isVimeo(el); + const id = ++counter; + let poller; + return el[stateKey] = new Promise((resolve) => { + youtube && once(el, "load", () => { + const listener = () => post(el, { event: "listening", id }); + poller = setInterval(listener, 100); + listener(); + }); + once(window, "message", resolve, false, ({ data }) => { + try { + data = JSON.parse(data); + return youtube && (data == null ? void 0 : data.id) === id && data.event === "onReady" || vimeo && Number(data == null ? void 0 : data.player_id) === id; + } catch (e) { + } + }); + el.src = `${el.src}${includes(el.src, "?") ? "&" : "?"}${youtube ? "enablejsapi=1" : `api=1&player_id=${id}`}`; + }).then(() => clearInterval(poller)); + } + + function isInView(element, offsetTop = 0, offsetLeft = 0) { + if (!isVisible(element)) { + return false; + } + return intersectRect( + ...overflowParents(element).map((parent2) => { + const { top, left, bottom, right } = offsetViewport(parent2); + return { + top: top - offsetTop, + left: left - offsetLeft, + bottom: bottom + offsetTop, + right: right + offsetLeft + }; + }).concat(offset(element)) + ); + } + function scrollIntoView(element, { offset: offsetBy = 0 } = {}) { + const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : []; + return parents2.reduce( + (fn, scrollElement, i) => { + const { scrollTop, scrollHeight, offsetHeight } = scrollElement; + const viewport = offsetViewport(scrollElement); + const maxScroll = scrollHeight - viewport.height; + const { height: elHeight, top: elTop } = parents2[i - 1] ? offsetViewport(parents2[i - 1]) : offset(element); + let top = Math.ceil(elTop - viewport.top - offsetBy + scrollTop); + if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) { + top += offsetBy; + } else { + offsetBy = 0; + } + if (top > maxScroll) { + offsetBy -= top - maxScroll; + top = maxScroll; + } else if (top < 0) { + offsetBy -= top; + top = 0; + } + return () => scrollTo(scrollElement, top - scrollTop, element, maxScroll).then(fn); + }, + () => Promise.resolve() + )(); + function scrollTo(element2, top, targetEl, maxScroll) { + return new Promise((resolve) => { + const scroll = element2.scrollTop; + const duration = getDuration(Math.abs(top)); + const start = Date.now(); + const isScrollingElement = scrollingElement(element2) === element2; + const targetTop = offset(targetEl).top + (isScrollingElement ? 0 : scroll); + let prev = 0; + let frames = 15; + (function step() { + const percent = ease(clamp((Date.now() - start) / duration)); + let diff = 0; + if (parents2[0] === element2 && scroll + top < maxScroll) { + diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop - dimensions$1(getCoveringElement(targetEl)).height; + } + if (css(element2, "scrollBehavior") !== "auto") { + css(element2, "scrollBehavior", "auto"); + } + element2.scrollTop = scroll + (top + diff) * percent; + css(element2, "scrollBehavior", ""); + if (percent === 1 && (prev === diff || !frames--)) { + resolve(); + } else { + prev = diff; + requestAnimationFrame(step); + } + })(); + }); + } + function getDuration(dist) { + return 40 * Math.pow(dist, 0.375); + } + function ease(k) { + return 0.5 * (1 - Math.cos(Math.PI * k)); + } + } + function scrolledOver(element, startOffset = 0, endOffset = 0) { + if (!isVisible(element)) { + return 0; + } + const scrollElement = scrollParent(element, true); + const { scrollHeight, scrollTop } = scrollElement; + const { height: viewportHeight } = offsetViewport(scrollElement); + const maxScroll = scrollHeight - viewportHeight; + const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0]; + const start = Math.max(0, elementOffsetTop - viewportHeight + startOffset); + const end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset); + return start < end ? clamp((scrollTop - start) / (end - start)) : 1; + } + function scrollParents(element, scrollable = false, props = []) { + const scrollEl = scrollingElement(element); + let ancestors = parents(element).reverse(); + ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1); + const fixedIndex = findIndex(ancestors, (el) => css(el, "position") === "fixed"); + if (~fixedIndex) { + ancestors = ancestors.slice(fixedIndex); + } + return [scrollEl].concat( + ancestors.filter( + (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height) + ) + ).reverse(); + } + function scrollParent(...args) { + return scrollParents(...args)[0]; + } + function overflowParents(element) { + return scrollParents(element, false, ["hidden", "clip"]); + } + function offsetViewport(scrollElement) { + const window = toWindow(scrollElement); + const documentScrollingElement = scrollingElement(scrollElement); + const useWindow = !isNode(scrollElement) || scrollElement.contains(documentScrollingElement); + if (useWindow && window.visualViewport) { + let { height, width, scale, pageTop: top, pageLeft: left } = window.visualViewport; + height = Math.round(height * scale); + width = Math.round(width * scale); + return { height, width, top, left, bottom: top + height, right: left + width }; + } + let rect = offset(useWindow ? window : scrollElement); + if (css(scrollElement, "display") === "inline") { + return rect; + } + const { body, documentElement } = window.document; + const viewportElement = useWindow ? documentScrollingElement === documentElement || // In quirks mode the scrolling element is body, even though the viewport is html + documentScrollingElement.clientHeight < body.clientHeight ? documentScrollingElement : body : scrollElement; + for (let [prop, dir, start, end] of [ + ["width", "x", "left", "right"], + ["height", "y", "top", "bottom"] + ]) { + const subpixel = rect[prop] % 1; + rect[start] += toFloat(css(viewportElement, `border-${start}-width`)); + rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`] - (subpixel ? subpixel < 0.5 ? -subpixel : 1 - subpixel : 0); + rect[end] = rect[prop] + rect[start]; + } + return rect; + } + function getCoveringElement(target) { + const { left, width, top } = dimensions$1(target); + for (const position of top ? [0, top] : [0]) { + let coverEl; + for (const el of toWindow(target).document.elementsFromPoint(left + width / 2, position)) { + if (!el.contains(target) && // If e.g. Offcanvas is not yet closed + !hasClass(el, "uk-togglable-leave") && (hasPosition(el, "fixed") && zIndex( + parents(target).reverse().find( + (parent2) => !parent2.contains(el) && !hasPosition(parent2, "static") + ) + ) < zIndex(el) || hasPosition(el, "sticky") && parent(el).contains(target)) && (!coverEl || dimensions$1(coverEl).height < dimensions$1(el).height)) { + coverEl = el; + } + } + if (coverEl) { + return coverEl; + } + } + } + function zIndex(element) { + return toFloat(css(element, "zIndex")); + } + function hasPosition(element, position) { + return css(element, "position") === position; + } + function scrollingElement(element) { + return toWindow(element).document.scrollingElement; + } + + const dirs = [ + ["width", "x", "left", "right"], + ["height", "y", "top", "bottom"] + ]; + function positionAt(element, target, options) { + options = { + attach: { + element: ["left", "top"], + target: ["left", "top"], + ...options.attach + }, + offset: [0, 0], + placement: [], + ...options + }; + if (!isArray(target)) { + target = [target, target]; + } + offset(element, getPosition(element, target, options)); + } + function getPosition(element, target, options) { + const position = attachTo(element, target, options); + const { boundary, viewportOffset = 0, placement } = options; + let offsetPosition = position; + for (const [i, [prop, , start, end]] of Object.entries(dirs)) { + const viewport = getViewport$2(element, target[i], viewportOffset, boundary, i); + if (isWithin(position, viewport, i)) { + continue; + } + let offsetBy = 0; + if (placement[i] === "flip") { + const attach = options.attach.target[i]; + if (attach === end && position[end] <= viewport[end] || attach === start && position[start] >= viewport[start]) { + continue; + } + offsetBy = flip(element, target, options, i)[start] - position[start]; + const scrollArea = getScrollArea(element, target[i], viewportOffset, i); + if (!isWithin(applyOffset(position, offsetBy, i), scrollArea, i)) { + if (isWithin(position, scrollArea, i)) { + continue; + } + if (options.recursion) { + return false; + } + const newPos = flipAxis(element, target, options); + if (newPos && isWithin(newPos, scrollArea, 1 - i)) { + return newPos; + } + continue; + } + } else if (placement[i] === "shift") { + const targetDim = offset(target[i]); + const { offset: elOffset } = options; + offsetBy = clamp( + clamp(position[start], viewport[start], viewport[end] - position[prop]), + targetDim[start] - position[prop] + elOffset[i], + targetDim[end] - elOffset[i] + ) - position[start]; + } + offsetPosition = applyOffset(offsetPosition, offsetBy, i); + } + return offsetPosition; + } + function attachTo(element, target, options) { + let { attach, offset: offsetBy } = { + attach: { + element: ["left", "top"], + target: ["left", "top"], + ...options.attach + }, + offset: [0, 0], + ...options + }; + let elOffset = offset(element); + for (const [i, [prop, , start, end]] of Object.entries(dirs)) { + const targetOffset = attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]); + elOffset = applyOffset( + elOffset, + targetOffset[start] - elOffset[start] + moveBy(attach.target[i], end, targetOffset[prop]) - moveBy(attach.element[i], end, elOffset[prop]) + +offsetBy[i], + i + ); + } + return elOffset; + } + function applyOffset(position, offset2, i) { + const [, dir, start, end] = dirs[i]; + const newPos = { ...position }; + newPos[start] = position[dir] = position[start] + offset2; + newPos[end] += offset2; + return newPos; + } + function moveBy(attach, end, dim) { + return attach === "center" ? dim / 2 : attach === end ? dim : 0; + } + function getViewport$2(element, target, viewportOffset, boundary, i) { + let viewport = getIntersectionArea(...commonScrollParents(element, target).map(offsetViewport)); + if (viewportOffset) { + viewport[dirs[i][2]] += viewportOffset; + viewport[dirs[i][3]] -= viewportOffset; + } + if (boundary) { + viewport = getIntersectionArea( + viewport, + offset(isArray(boundary) ? boundary[i] : boundary) + ); + } + return viewport; + } + function getScrollArea(element, target, viewportOffset, i) { + const [prop, axis, start, end] = dirs[i]; + const [scrollElement] = commonScrollParents(element, target); + const viewport = offsetViewport(scrollElement); + if (["auto", "scroll"].includes(css(scrollElement, `overflow-${axis}`))) { + viewport[start] -= scrollElement[`scroll${ucfirst(start)}`]; + viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`]; + } + viewport[start] += viewportOffset; + viewport[end] -= viewportOffset; + return viewport; + } + function commonScrollParents(element, target) { + return overflowParents(target).filter((parent) => parent.contains(element)); + } + function getIntersectionArea(...rects) { + let area = {}; + for (const rect of rects) { + for (const [, , start, end] of dirs) { + area[start] = Math.max(area[start] || 0, rect[start]); + area[end] = Math.min(...[area[end], rect[end]].filter(Boolean)); + } + } + return area; + } + function isWithin(positionA, positionB, i) { + const [, , start, end] = dirs[i]; + return positionA[start] >= positionB[start] && positionA[end] <= positionB[end]; + } + function flip(element, target, { offset: offset2, attach }, i) { + return attachTo(element, target, { + attach: { + element: flipAttach(attach.element, i), + target: flipAttach(attach.target, i) + }, + offset: flipOffset(offset2, i) + }); + } + function flipAxis(element, target, options) { + return getPosition(element, target, { + ...options, + attach: { + element: options.attach.element.map(flipAttachAxis).reverse(), + target: options.attach.target.map(flipAttachAxis).reverse() + }, + offset: options.offset.reverse(), + placement: options.placement.reverse(), + recursion: true + }); + } + function flipAttach(attach, i) { + const newAttach = [...attach]; + const index = dirs[i].indexOf(attach[i]); + if (~index) { + newAttach[i] = dirs[i][1 - index % 2 + 2]; + } + return newAttach; + } + function flipAttachAxis(prop) { + for (let i = 0; i < dirs.length; i++) { + const index = dirs[i].indexOf(prop); + if (~index) { + return dirs[1 - i][index % 2 + 2]; + } + } + } + function flipOffset(offset2, i) { + offset2 = [...offset2]; + offset2[i] *= -1; + return offset2; + } + + var util = /*#__PURE__*/Object.freeze({ + __proto__: null, + $: $, + $$: $$, + Animation: Animation, + Dimensions: Dimensions, + MouseTracker: MouseTracker, + Transition: Transition, + addClass: addClass, + after: after, + append: append, + apply: apply, + assign: assign, + attr: attr, + before: before, + boxModelAdjust: boxModelAdjust, + camelize: camelize, + children: children, + clamp: clamp, + createEvent: createEvent, + css: css, + data: data, + dimensions: dimensions$1, + each: each, + empty: empty, + endsWith: endsWith, + escape: escape, + fastdom: fastdom, + filter: filter$1, + find: find, + findAll: findAll, + findIndex: findIndex, + flipPosition: flipPosition, + fragment: fragment, + getCoveringElement: getCoveringElement, + getEventPos: getEventPos, + getIndex: getIndex, + getTargetedElement: getTargetedElement, + hasAttr: hasAttr, + hasClass: hasClass, + hasOwn: hasOwn, + hasTouch: hasTouch, + height: height, + html: html, + hyphenate: hyphenate, + inBrowser: inBrowser, + includes: includes, + index: index, + intersectRect: intersectRect, + isArray: isArray, + isBoolean: isBoolean, + isDocument: isDocument, + isElement: isElement, + isEmpty: isEmpty, + isEqual: isEqual, + isFocusable: isFocusable, + isFunction: isFunction, + isInView: isInView, + isInput: isInput, + isNode: isNode, + isNumber: isNumber, + isNumeric: isNumeric, + isObject: isObject, + isPlainObject: isPlainObject, + isRtl: isRtl, + isSameSiteAnchor: isSameSiteAnchor, + isString: isString, + isTag: isTag, + isTouch: isTouch, + isUndefined: isUndefined, + isVisible: isVisible, + isVoidElement: isVoidElement, + isWindow: isWindow, + last: last, + matches: matches, + memoize: memoize, + mute: mute, + noop: noop, + observeIntersection: observeIntersection, + observeMutation: observeMutation, + observeResize: observeResize, + observeViewportResize: observeViewportResize, + off: off, + offset: offset, + offsetPosition: offsetPosition, + offsetViewport: offsetViewport, + on: on, + once: once, + overflowParents: overflowParents, + parent: parent, + parents: parents, + pause: pause, + pick: pick, + play: play, + pointInRect: pointInRect, + pointerCancel: pointerCancel, + pointerDown: pointerDown$1, + pointerEnter: pointerEnter, + pointerLeave: pointerLeave, + pointerMove: pointerMove$1, + pointerUp: pointerUp$1, + position: position, + positionAt: positionAt, + prepend: prepend, + propName: propName, + query: query, + queryAll: queryAll, + ready: ready, + remove: remove$1, + removeAttr: removeAttr, + removeClass: removeClass, + replaceClass: replaceClass, + resetProps: resetProps, + scrollIntoView: scrollIntoView, + scrollParent: scrollParent, + scrollParents: scrollParents, + scrolledOver: scrolledOver, + selFocusable: selFocusable, + selInput: selInput, + sortBy: sortBy, + startsWith: startsWith, + sumBy: sumBy, + swap: swap, + toArray: toArray, + toBoolean: toBoolean, + toEventTargets: toEventTargets, + toFloat: toFloat, + toNode: toNode, + toNodes: toNodes, + toNumber: toNumber, + toPx: toPx, + toWindow: toWindow, + toggleClass: toggleClass, + trigger: trigger, + ucfirst: ucfirst, + uniqueBy: uniqueBy, + unwrap: unwrap, + width: width, + wrapAll: wrapAll, + wrapInner: wrapInner + }); + + var Class = { + connected() { + addClass(this.$el, this.$options.id); + } + }; + + const units = ["days", "hours", "minutes", "seconds"]; + var countdown = { + mixins: [Class], + props: { + date: String, + clsWrapper: String, + role: String, + reload: Boolean + }, + data: { + date: "", + clsWrapper: ".uk-countdown-%unit%", + role: "timer", + reload: false + }, + connected() { + this.$el.role = this.role; + this.date = toFloat(Date.parse(this.$props.date)); + this.started = this.end = false; + this.start(); + }, + disconnected() { + this.stop(); + }, + events: { + name: "visibilitychange", + el: () => document, + handler() { + if (document.hidden) { + this.stop(); + } else { + this.start(); + } + } + }, + methods: { + start() { + this.stop(); + this.update(); + }, + stop() { + if (this.timer) { + clearInterval(this.timer); + trigger(this.$el, "countdownstop"); + this.timer = null; + } + }, + update() { + const timespan = getTimeSpan(this.date); + if (!timespan.total) { + this.stop(); + if (!this.end) { + trigger(this.$el, "countdownend"); + this.end = true; + if (this.reload && this.started) { + window.location.reload(); + } + } + } else if (!this.timer) { + this.started = true; + this.timer = setInterval(this.update, 1e3); + trigger(this.$el, "countdownstart"); + } + for (const unit of units) { + const el = $(this.clsWrapper.replace("%unit%", unit), this.$el); + if (!el) { + continue; + } + let digits = Math.trunc(timespan[unit]).toString().padStart(2, "0"); + if (el.textContent !== digits) { + digits = digits.split(""); + if (digits.length !== el.children.length) { + html(el, digits.map(() => "").join("")); + } + digits.forEach((digit, i) => el.children[i].textContent = digit); + } + } + } + } + }; + function getTimeSpan(date) { + const total = Math.max(0, date - Date.now()) / 1e3; + return { + total, + seconds: total % 60, + minutes: total / 60 % 60, + hours: total / 60 / 60 % 24, + days: total / 60 / 60 / 24 + }; + } + + const strats = {}; + strats.events = strats.watch = strats.observe = strats.created = strats.beforeConnect = strats.connected = strats.beforeDisconnect = strats.disconnected = strats.destroy = concatStrat; + strats.args = function(parentVal, childVal) { + return childVal !== false && concatStrat(childVal || parentVal); + }; + strats.update = function(parentVal, childVal) { + return sortBy( + concatStrat(parentVal, isFunction(childVal) ? { read: childVal } : childVal), + "order" + ); + }; + strats.props = function(parentVal, childVal) { + if (isArray(childVal)) { + const value = {}; + for (const key of childVal) { + value[key] = String; + } + childVal = value; + } + return strats.methods(parentVal, childVal); + }; + strats.computed = strats.methods = function(parentVal, childVal) { + return childVal ? parentVal ? { ...parentVal, ...childVal } : childVal : parentVal; + }; + strats.i18n = strats.data = function(parentVal, childVal, vm) { + if (!vm) { + if (!childVal) { + return parentVal; + } + if (!parentVal) { + return childVal; + } + return function(vm2) { + return mergeFnData(parentVal, childVal, vm2); + }; + } + return mergeFnData(parentVal, childVal, vm); + }; + function mergeFnData(parentVal, childVal, vm) { + return strats.computed( + isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal, + isFunction(childVal) ? childVal.call(vm, vm) : childVal + ); + } + function concatStrat(parentVal, childVal) { + parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal; + return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal; + } + function defaultStrat(parentVal, childVal) { + return isUndefined(childVal) ? parentVal : childVal; + } + function mergeOptions(parent, child, vm) { + const options = {}; + if (isFunction(child)) { + child = child.options; + } + if (child.extends) { + parent = mergeOptions(parent, child.extends, vm); + } + if (child.mixins) { + for (const mixin of child.mixins) { + parent = mergeOptions(parent, mixin, vm); + } + } + for (const key in parent) { + mergeKey(key); + } + for (const key in child) { + if (!hasOwn(parent, key)) { + mergeKey(key); + } + } + function mergeKey(key) { + options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm); + } + return options; + } + function parseOptions(options, args = []) { + try { + return options ? startsWith(options, "{") ? JSON.parse(options) : args.length && !includes(options, ":") ? { [args[0]]: options } : options.split(";").reduce((options2, option) => { + const [key, value] = option.split(/:(.*)/); + if (key && !isUndefined(value)) { + options2[key.trim()] = value.trim(); + } + return options2; + }, {}) : {}; + } catch (e) { + return {}; + } + } + function coerce$1(type, value) { + if (type === Boolean) { + return toBoolean(value); + } else if (type === Number) { + return toNumber(value); + } else if (type === "list") { + return toList(value); + } else if (type === Object && isString(value)) { + return parseOptions(value); + } + return type ? type(value) : value; + } + const listRe = /,(?![^(]*\))/; + function toList(value) { + return isArray(value) ? value : isString(value) ? value.split(listRe).map((value2) => isNumeric(value2) ? toNumber(value2) : toBoolean(value2.trim())) : [value]; + } + + function initUpdates(instance) { + instance._data = {}; + instance._updates = [...instance.$options.update || []]; + instance._disconnect.push(() => instance._updates = instance._data = null); + } + function prependUpdate(instance, update) { + instance._updates.unshift(update); + } + function callUpdate(instance, e = "update") { + if (!instance._connected) { + return; + } + if (!instance._updates.length) { + return; + } + if (!instance._queued) { + instance._queued = /* @__PURE__ */ new Set(); + fastdom.read(() => { + if (instance._connected) { + runUpdates(instance, instance._queued); + } + instance._queued = null; + }); + } + instance._queued.add(e.type || e); + } + function runUpdates(instance, types) { + for (const { read, write, events = [] } of instance._updates) { + if (!types.has("update") && !events.some((type) => types.has(type))) { + continue; + } + let result; + if (read) { + result = read.call(instance, instance._data, types); + if (result && isPlainObject(result)) { + assign(instance._data, result); + } + } + if (write && result !== false) { + fastdom.write(() => { + if (instance._connected) { + write.call(instance, instance._data, types); + } + }); + } + } + } + + function resize(options) { + return observe(observeResize, options, "resize"); + } + function intersection(options) { + return observe(observeIntersection, options); + } + function mutation(options) { + return observe(observeMutation, options); + } + function lazyload(options = {}) { + return intersection({ + handler: function(entries, observer) { + const { targets = this.$el, preload = 5 } = options; + for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) { + $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading")); + } + for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) { + observer.unobserve(el); + } + }, + ...options + }); + } + function viewport(options) { + return observe((target, handler) => observeViewportResize(handler), options, "resize"); + } + function scroll$1(options) { + return observe( + (target, handler) => ({ + disconnect: on(toScrollTargets(target), "scroll", handler, { passive: true }) + }), + options, + "scroll" + ); + } + function swipe(options) { + return { + observe(target, handler) { + return { + observe: noop, + unobserve: noop, + disconnect: on(target, pointerDown$1, handler, { passive: true }) + }; + }, + handler(e) { + if (!isTouch(e)) { + return; + } + const pos = getEventPos(e); + const target = "tagName" in e.target ? e.target : parent(e.target); + once(document, `${pointerUp$1} ${pointerCancel} scroll`, (e2) => { + const { x, y } = getEventPos(e2); + if (e2.type !== "scroll" && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) { + setTimeout(() => { + trigger(target, "swipe"); + trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`); + }); + } + }); + }, + ...options + }; + } + function observe(observe2, options, emit) { + return { + observe: observe2, + handler() { + callUpdate(this, emit); + }, + ...options + }; + } + function swipeDirection(x1, y1, x2, y2) { + return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? "Left" : "Right" : y1 - y2 > 0 ? "Up" : "Down"; + } + function toScrollTargets(elements) { + return toNodes(elements).map((node) => { + const { ownerDocument } = node; + const parent2 = scrollParent(node, true); + return parent2 === ownerDocument.scrollingElement ? ownerDocument : parent2; + }); + } + + var Margin = { + props: { + margin: String, + firstColumn: Boolean + }, + data: { + margin: "uk-margin-small-top", + firstColumn: "uk-first-column" + }, + observe: [ + mutation({ + options: { + childList: true + } + }), + mutation({ + options: { + attributes: true, + attributeFilter: ["style"] + } + }), + resize({ + handler(mutations) { + for (const { + borderBoxSize: [{ inlineSize, blockSize }] + } of mutations) { + if (inlineSize || blockSize) { + this.$emit("resize"); + return; + } + } + }, + target: ({ $el }) => [$el, ...children($el)] + }) + ], + update: { + read() { + return { + rows: getRows(children(this.$el)) + }; + }, + write({ rows }) { + for (const row of rows) { + for (const el of row) { + toggleClass(el, this.margin, rows[0] !== row); + toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el); + } + } + }, + events: ["resize"] + } + }; + function getRows(elements) { + const sorted = [[]]; + const withOffset = elements.some( + (el, i) => i && elements[i - 1].offsetParent !== el.offsetParent + ); + for (const el of elements) { + if (!isVisible(el)) { + continue; + } + const offset = getOffset(el, withOffset); + for (let i = sorted.length - 1; i >= 0; i--) { + const current = sorted[i]; + if (!current[0]) { + current.push(el); + break; + } + const offsetCurrent = getOffset(current[0], withOffset); + if (offset.top >= offsetCurrent.bottom - 1 && offset.top !== offsetCurrent.top) { + sorted.push([el]); + break; + } + if (offset.bottom - 1 > offsetCurrent.top || offset.top === offsetCurrent.top) { + let j = current.length - 1; + for (; j >= 0; j--) { + const offsetCurrent2 = getOffset(current[j], withOffset); + if (offset.left >= offsetCurrent2.left) { + break; + } + } + current.splice(j + 1, 0, el); + break; + } + if (i === 0) { + sorted.unshift([el]); + break; + } + } + } + return sorted; + } + function getOffset(element, offset = false) { + let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element; + if (offset) { + [offsetTop, offsetLeft] = offsetPosition(element); + } + return { + top: offsetTop, + left: offsetLeft, + bottom: offsetTop + offsetHeight, + right: offsetLeft + offsetWidth + }; + } + + const clsLeave = "uk-transition-leave"; + const clsEnter = "uk-transition-enter"; + function fade(action, target, duration, stagger = 0) { + const index = transitionIndex(target, true); + const propsIn = { opacity: 1 }; + const propsOut = { opacity: 0 }; + const isCurrentIndex = () => index === transitionIndex(target); + const wrapIndexFn = (fn) => () => isCurrentIndex() ? fn() : Promise.reject(); + const leaveFn = wrapIndexFn(async () => { + addClass(target, clsLeave); + await (stagger ? Promise.all( + getTransitionNodes(target).map(async (child, i) => { + await awaitTimeout(i * stagger); + return Transition.start(child, propsOut, duration / 2, "ease"); + }) + ) : Transition.start(target, propsOut, duration / 2, "ease")); + removeClass(target, clsLeave); + }); + const enterFn = wrapIndexFn(async () => { + const oldHeight = height(target); + addClass(target, clsEnter); + action(); + css(stagger ? children(target) : target, propsOut); + height(target, oldHeight); + await awaitTimeout(); + height(target, ""); + const newHeight = height(target); + css(target, "alignContent", "flex-start"); + height(target, oldHeight); + let transitions = []; + let targetDuration = duration / 2; + if (stagger) { + const nodes = getTransitionNodes(target); + css(children(target), propsOut); + transitions = nodes.map(async (child, i) => { + await awaitTimeout(i * stagger); + await Transition.start(child, propsIn, duration / 2, "ease"); + if (isCurrentIndex()) { + resetProps(child, propsIn); + } + }); + targetDuration += nodes.length * stagger; + } + if (!stagger || oldHeight !== newHeight) { + const targetProps = { height: newHeight, ...stagger ? {} : propsIn }; + transitions.push(Transition.start(target, targetProps, targetDuration, "ease")); + } + await Promise.all(transitions); + removeClass(target, clsEnter); + if (isCurrentIndex()) { + resetProps(target, { height: "", alignContent: "", ...propsIn }); + delete target.dataset.transition; + } + }); + return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn); + } + function transitionIndex(target, next) { + if (next) { + target.dataset.transition = 1 + transitionIndex(target); + } + return toNumber(target.dataset.transition) || 0; + } + function waitTransitionend(target) { + return Promise.all( + children(target).filter(Transition.inProgress).map( + (el) => new Promise((resolve) => once(el, "transitionend transitioncanceled", resolve)) + ) + ); + } + function getTransitionNodes(target) { + return getRows(children(target)).flat().filter(isVisible); + } + function awaitTimeout(timeout) { + return new Promise((resolve) => setTimeout(resolve, timeout)); + } + + async function slide(action, target, duration) { + await awaitFrame(); + let nodes = children(target); + const currentProps = nodes.map((el) => getProps$1(el, true)); + const targetProps = { ...css(target, ["height", "padding"]), display: "block" }; + const targets = nodes.concat(target); + await Promise.all(targets.map(Transition.cancel)); + css(targets, "transitionProperty", "none"); + await action(); + nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el))); + await Promise.resolve(); + css(targets, "transitionProperty", ""); + const targetStyle = attr(target, "style"); + const targetPropsTo = css(target, ["height", "padding"]); + const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps); + const attrsTo = nodes.map((el) => ({ style: attr(el, "style") })); + nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i])); + css(target, targetProps); + trigger(target, "scroll"); + await awaitFrame(); + const transitions = nodes.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, "ease")).concat(Transition.start(target, targetPropsTo, duration, "ease")); + try { + await Promise.all(transitions); + nodes.forEach((el, i) => { + attr(el, attrsTo[i]); + if (parent(el) === target) { + css(el, "display", propsTo[i].opacity === 0 ? "none" : ""); + } + }); + attr(target, "style", targetStyle); + } catch (e) { + attr(nodes, "style", ""); + resetProps(target, targetProps); + } + } + function getProps$1(el, opacity) { + const zIndex = css(el, "zIndex"); + return isVisible(el) ? { + display: "", + opacity: opacity ? css(el, "opacity") : "0", + pointerEvents: "none", + position: "absolute", + zIndex: zIndex === "auto" ? index(el) : zIndex, + ...getPositionWithMargin(el) + } : false; + } + function getTransitionProps(target, nodes, currentProps) { + const propsTo = nodes.map( + (el, i) => parent(el) && i in currentProps ? currentProps[i] ? isVisible(el) ? getPositionWithMargin(el) : { opacity: 0 } : { opacity: isVisible(el) ? 1 : 0 } : false + ); + const propsFrom = propsTo.map((props, i) => { + const from = parent(nodes[i]) === target && (currentProps[i] || getProps$1(nodes[i])); + if (!from) { + return false; + } + if (!props) { + delete from.opacity; + } else if (!("opacity" in props)) { + const { opacity } = from; + if (opacity % 1) { + props.opacity = 1; + } else { + delete from.opacity; + } + } + return from; + }); + return [propsTo, propsFrom]; + } + function getPositionWithMargin(el) { + const { height, width } = dimensions$1(el); + return { + height, + width, + transform: "", + ...position(el), + ...css(el, ["marginTop", "marginLeft"]) + }; + } + function awaitFrame() { + return new Promise((resolve) => requestAnimationFrame(resolve)); + } + + var Animate = { + props: { + duration: Number, + animation: Boolean + }, + data: { + duration: 150, + animation: "slide" + }, + methods: { + animate(action, target = this.$el) { + const name = this.animation; + const animationFn = name === "fade" ? fade : name === "delayed-fade" ? (...args) => fade(...args, 40) : name ? slide : () => { + action(); + return Promise.resolve(); + }; + return animationFn(action, target, this.duration).catch(noop); + } + } + }; + + function maybeDefaultPreventClick(e) { + if (e.target.closest('a[href="#"],a[href=""]')) { + e.preventDefault(); + } + } + + const keyMap = { + TAB: 9, + ESC: 27, + SPACE: 32, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40 + }; + + var filter = { + mixins: [Animate], + args: "target", + props: { + target: String, + selActive: Boolean + }, + data: { + target: "", + selActive: false, + attrItem: "uk-filter-control", + cls: "uk-active", + duration: 250 + }, + computed: { + children: ({ target }, $el) => $$(`${target} > *`, $el), + toggles: ({ attrItem }, $el) => $$(`[${attrItem}],[data-${attrItem}]`, $el) + }, + watch: { + toggles(toggles) { + this.updateState(); + const actives = $$(this.selActive, this.$el); + for (const toggle of toggles) { + if (this.selActive !== false) { + toggleClass(toggle, this.cls, includes(actives, toggle)); + } + const button = findButton(toggle); + if (isTag(button, "a")) { + button.role = "button"; + } + } + }, + children(list, prev) { + if (prev) { + this.updateState(); + } + } + }, + events: { + name: "click keydown", + delegate: ({ attrItem }) => `[${attrItem}],[data-${attrItem}]`, + handler(e) { + if (e.type === "keydown" && e.keyCode !== keyMap.SPACE) { + return; + } + if (e.target.closest("a,button")) { + maybeDefaultPreventClick(e); + this.apply(e.current); + } + } + }, + methods: { + apply(el) { + const prevState = this.getState(); + const newState = mergeState(el, this.attrItem, this.getState()); + if (!isEqualState(prevState, newState)) { + this.setState(newState); + } + }, + getState() { + return this.toggles.filter((item) => hasClass(item, this.cls)).reduce((state, el) => mergeState(el, this.attrItem, state), { + filter: { "": "" }, + sort: [] + }); + }, + async setState(state, animate = true) { + state = { filter: { "": "" }, sort: [], ...state }; + trigger(this.$el, "beforeFilter", [this, state]); + for (const toggle of this.toggles) { + toggleClass(toggle, this.cls, matchFilter(toggle, this.attrItem, state)); + } + await Promise.all( + $$(this.target, this.$el).map((target) => { + const filterFn = () => applyState(state, target, children(target)); + return animate ? this.animate(filterFn, target) : filterFn(); + }) + ); + trigger(this.$el, "afterFilter", [this]); + }, + updateState() { + fastdom.write(() => this.setState(this.getState(), false)); + } + } + }; + function getFilter(el, attr) { + return parseOptions(data(el, attr), ["filter"]); + } + function isEqualState(stateA, stateB) { + return ["filter", "sort"].every((prop) => isEqual(stateA[prop], stateB[prop])); + } + function applyState(state, target, children) { + for (const el of children) { + css( + el, + "display", + Object.values(state.filter).every((selector) => !selector || matches(el, selector)) ? "" : "none" + ); + } + const [sort, order] = state.sort; + if (sort) { + const sorted = sortItems(children, sort, order); + if (!isEqual(sorted, children)) { + append(target, sorted); + } + } + } + function mergeState(el, attr, state) { + const { filter, group, sort, order = "asc" } = getFilter(el, attr); + if (filter || isUndefined(sort)) { + if (group) { + if (filter) { + delete state.filter[""]; + state.filter[group] = filter; + } else { + delete state.filter[group]; + if (isEmpty(state.filter) || "" in state.filter) { + state.filter = { "": filter || "" }; + } + } + } else { + state.filter = { "": filter || "" }; + } + } + if (!isUndefined(sort)) { + state.sort = [sort, order]; + } + return state; + } + function matchFilter(el, attr, { filter: stateFilter = { "": "" }, sort: [stateSort, stateOrder] }) { + const { filter = "", group = "", sort, order = "asc" } = getFilter(el, attr); + return isUndefined(sort) ? group in stateFilter && filter === stateFilter[group] || !filter && group && !(group in stateFilter) && !stateFilter[""] : stateSort === sort && stateOrder === order; + } + function sortItems(nodes, sort, order) { + return [...nodes].sort( + (a, b) => data(a, sort).localeCompare(data(b, sort), void 0, { numeric: true }) * (order === "asc" || -1) + ); + } + function findButton(el) { + return $("a,button", el) || el; + } + + var img = { + args: "dataSrc", + props: { + dataSrc: String, + sources: String, + margin: String, + target: String, + loading: String + }, + data: { + dataSrc: "", + sources: false, + margin: "50%", + target: false, + loading: "lazy" + }, + connected() { + if (this.loading !== "lazy") { + this.load(); + } else if (isImg(this.$el)) { + this.$el.loading = "lazy"; + setSrcAttrs(this.$el); + } + }, + disconnected() { + if (this.img) { + this.img.onload = ""; + } + delete this.img; + }, + observe: intersection({ + handler(entries, observer) { + this.load(); + observer.disconnect(); + }, + options: ({ margin }) => ({ rootMargin: margin }), + filter: ({ loading }) => loading === "lazy", + target: ({ $el, $props }) => $props.target ? [$el, ...queryAll($props.target, $el)] : $el + }), + methods: { + load() { + if (this.img) { + return this.img; + } + const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc, this.sources); + removeAttr(image, "loading"); + setSrcAttrs(this.$el, image.currentSrc); + return this.img = image; + } + } + }; + function setSrcAttrs(el, src) { + if (isImg(el)) { + const parentNode = parent(el); + const elements = isTag(parentNode, "picture") ? children(parentNode) : [el]; + elements.forEach((el2) => setSourceProps(el2, el2)); + } else if (src) { + const change = !includes(el.style.backgroundImage, src); + if (change) { + css(el, "backgroundImage", `url(${escape(src)})`); + trigger(el, createEvent("load", false)); + } + } + } + const srcProps = ["data-src", "data-srcset", "sizes"]; + function setSourceProps(sourceEl, targetEl) { + for (const prop of srcProps) { + const value = data(sourceEl, prop); + if (value) { + attr(targetEl, prop.replace(/data-/g, ""), value); + } + } + } + function getImageFromElement(el, src, sources) { + const img = new Image(); + wrapInPicture(img, sources); + setSourceProps(el, img); + img.onload = () => setSrcAttrs(el, img.currentSrc); + img.src = src; + return img; + } + function wrapInPicture(img, sources) { + sources = parseSources(sources); + if (sources.length) { + const picture = fragment(""); + for (const attrs of sources) { + const source = fragment(""); + attr(source, attrs); + append(picture, source); + } + append(picture, img); + } + } + function parseSources(sources) { + if (!sources) { + return []; + } + if (startsWith(sources, "[")) { + try { + sources = JSON.parse(sources); + } catch (e) { + sources = []; + } + } else { + sources = parseOptions(sources); + } + if (!isArray(sources)) { + sources = [sources]; + } + return sources.filter((source) => !isEmpty(source)); + } + function isImg(el) { + return isTag(el, "img"); + } + + let prevented; + function preventBackgroundScroll(el) { + const off = on( + el, + "touchstart", + (e) => { + if (e.targetTouches.length !== 1 || matches(e.target, 'input[type="range"')) { + return; + } + let prev = getEventPos(e).y; + const offMove = on( + el, + "touchmove", + (e2) => { + const pos = getEventPos(e2).y; + if (pos === prev) { + return; + } + prev = pos; + if (!scrollParents(e2.target).some((scrollParent) => { + if (!el.contains(scrollParent)) { + return false; + } + let { scrollHeight, clientHeight } = scrollParent; + return clientHeight < scrollHeight; + })) { + e2.preventDefault(); + } + }, + { passive: false } + ); + once(el, "scroll touchend touchcanel", offMove, { capture: true }); + }, + { passive: true } + ); + if (prevented) { + return off; + } + prevented = true; + const { scrollingElement } = document; + const props = { + overflowY: CSS.supports("overflow", "clip") ? "clip" : "hidden", + touchAction: "none", + paddingRight: width(window) - scrollingElement.clientWidth || "" + }; + css(scrollingElement, props); + return () => { + prevented = false; + off(); + resetProps(scrollingElement, props); + }; + } + + var Container = { + props: { + container: Boolean + }, + data: { + container: true + }, + computed: { + container({ container }) { + return container === true && this.$container || container && $(container); + } + } + }; + + var Position = { + props: { + pos: String, + offset: Boolean, + flip: Boolean, + shift: Boolean, + inset: Boolean + }, + data: { + pos: `bottom-${isRtl ? "right" : "left"}`, + offset: false, + flip: true, + shift: true, + inset: false + }, + connected() { + this.pos = this.$props.pos.split("-").concat("center").slice(0, 2); + [this.dir, this.align] = this.pos; + this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x"; + }, + methods: { + positionAt(element, target, boundary) { + let offset = [this.getPositionOffset(element), this.getShiftOffset(element)]; + const placement = [this.flip && "flip", this.shift && "shift"]; + const attach = { + element: [this.inset ? this.dir : flipPosition(this.dir), this.align], + target: [this.dir, this.align] + }; + if (this.axis === "y") { + for (const prop in attach) { + attach[prop].reverse(); + } + offset.reverse(); + placement.reverse(); + } + const restoreScrollPosition = storeScrollPosition(element); + const elDim = dimensions$1(element); + css(element, { top: -elDim.height, left: -elDim.width }); + positionAt(element, target, { + attach, + offset, + boundary, + placement, + viewportOffset: this.getViewportOffset(element) + }); + restoreScrollPosition(); + }, + getPositionOffset(element = this.$el) { + return toPx( + this.offset === false ? css(element, "--uk-position-offset") : this.offset, + this.axis === "x" ? "width" : "height", + element + ) * (includes(["left", "top"], this.dir) ? -1 : 1) * (this.inset ? -1 : 1); + }, + getShiftOffset(element = this.$el) { + return this.align === "center" ? 0 : toPx( + css(element, "--uk-position-shift-offset"), + this.axis === "y" ? "width" : "height", + element + ) * (includes(["left", "top"], this.align) ? 1 : -1); + }, + getViewportOffset(element) { + return toPx(css(element, "--uk-position-viewport-offset")); + } + } + }; + function storeScrollPosition(element) { + const scrollElement = scrollParent(element); + const { scrollTop } = scrollElement; + return () => { + if (scrollTop !== scrollElement.scrollTop) { + scrollElement.scrollTop = scrollTop; + } + }; + } + + var Togglable = { + props: { + cls: Boolean, + animation: "list", + duration: Number, + velocity: Number, + origin: String, + transition: String + }, + data: { + cls: false, + animation: [false], + duration: 200, + velocity: 0.2, + origin: false, + transition: "ease", + clsEnter: "uk-togglable-enter", + clsLeave: "uk-togglable-leave" + }, + computed: { + hasAnimation: ({ animation }) => !!animation[0], + hasTransition: ({ animation }) => ["slide", "reveal"].some((transition) => startsWith(animation[0], transition)) + }, + methods: { + async toggleElement(targets, toggle, animate) { + try { + await Promise.all( + toNodes(targets).map((el) => { + const show = isBoolean(toggle) ? toggle : !this.isToggled(el); + if (!trigger(el, `before${show ? "show" : "hide"}`, [this])) { + return Promise.reject(); + } + const promise = (isFunction(animate) ? animate : animate === false || !this.hasAnimation ? toggleInstant : this.hasTransition ? toggleTransition : toggleAnimation)(el, show, this); + const cls = show ? this.clsEnter : this.clsLeave; + addClass(el, cls); + trigger(el, show ? "show" : "hide", [this]); + const done = () => { + var _a; + removeClass(el, cls); + trigger(el, show ? "shown" : "hidden", [this]); + if (show) { + const restoreScrollPosition = storeScrollPosition(el); + (_a = $$("[autofocus]", el).find(isVisible)) == null ? void 0 : _a.focus(); + restoreScrollPosition(); + } + }; + return promise ? promise.then(done, () => { + removeClass(el, cls); + return Promise.reject(); + }) : done(); + }) + ); + return true; + } catch (e) { + return false; + } + }, + isToggled(el = this.$el) { + el = toNode(el); + return hasClass(el, this.clsEnter) ? true : hasClass(el, this.clsLeave) ? false : this.cls ? hasClass(el, this.cls.split(" ")[0]) : isVisible(el); + }, + _toggle(el, toggled) { + if (!el) { + return; + } + toggled = Boolean(toggled); + let changed; + if (this.cls) { + changed = includes(this.cls, " ") || toggled !== hasClass(el, this.cls); + changed && toggleClass(el, this.cls, includes(this.cls, " ") ? void 0 : toggled); + } else { + changed = toggled === el.hidden; + changed && (el.hidden = !toggled); + } + if (changed) { + trigger(el, "toggled", [toggled, this]); + } + } + } + }; + function toggleInstant(el, show, { _toggle }) { + Animation.cancel(el); + Transition.cancel(el); + return _toggle(el, show); + } + async function toggleTransition(el, show, { animation, duration, velocity, transition, _toggle }) { + var _a; + const [mode = "reveal", startProp = "top"] = ((_a = animation[0]) == null ? void 0 : _a.split("-")) || []; + const dirs = [ + ["left", "right"], + ["top", "bottom"] + ]; + const dir = dirs[includes(dirs[0], startProp) ? 0 : 1]; + const end = dir[1] === startProp; + const props = ["width", "height"]; + const dimProp = props[dirs.indexOf(dir)]; + const marginProp = `margin-${dir[0]}`; + const marginStartProp = `margin-${startProp}`; + let currentDim = dimensions$1(el)[dimProp]; + const inProgress = Transition.inProgress(el); + await Transition.cancel(el); + if (show) { + _toggle(el, true); + } + const prevProps = Object.fromEntries( + [ + "padding", + "border", + "width", + "height", + "minWidth", + "minHeight", + "overflowY", + "overflowX", + marginProp, + marginStartProp + ].map((key) => [key, el.style[key]]) + ); + const dim = dimensions$1(el); + const currentMargin = toFloat(css(el, marginProp)); + const marginStart = toFloat(css(el, marginStartProp)); + const endDim = dim[dimProp] + marginStart; + if (!inProgress && !show) { + currentDim += marginStart; + } + const [wrapper] = wrapInner(el, "
"); + css(wrapper, { + boxSizing: "border-box", + height: dim.height, + width: dim.width, + ...css(el, [ + "overflow", + "padding", + "borderTop", + "borderRight", + "borderBottom", + "borderLeft", + "borderImage", + marginStartProp + ]) + }); + css(el, { + padding: 0, + border: 0, + minWidth: 0, + minHeight: 0, + [marginStartProp]: 0, + width: dim.width, + height: dim.height, + overflow: "hidden", + [dimProp]: currentDim + }); + const percent = currentDim / endDim; + duration = (velocity * endDim + duration) * (show ? 1 - percent : percent); + const endProps = { [dimProp]: show ? endDim : 0 }; + if (end) { + css(el, marginProp, endDim - currentDim + currentMargin); + endProps[marginProp] = show ? currentMargin : endDim + currentMargin; + } + if (!end ^ mode === "reveal") { + css(wrapper, marginProp, -endDim + currentDim); + Transition.start(wrapper, { [marginProp]: show ? 0 : -endDim }, duration, transition); + } + try { + await Transition.start(el, endProps, duration, transition); + } finally { + css(el, prevProps); + unwrap(wrapper.firstChild); + if (!show) { + _toggle(el, false); + } + } + } + function toggleAnimation(el, show, cmp) { + const { animation, duration, _toggle } = cmp; + if (show) { + _toggle(el, true); + return Animation.in(el, animation[0], duration, cmp.origin); + } + return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then( + () => _toggle(el, false) + ); + } + + const active$1 = []; + var Modal = { + mixins: [Class, Container, Togglable], + props: { + selPanel: String, + selClose: String, + escClose: Boolean, + bgClose: Boolean, + stack: Boolean, + role: String + }, + data: { + cls: "uk-open", + escClose: true, + bgClose: true, + overlay: true, + stack: false, + role: "dialog" + }, + computed: { + panel: ({ selPanel }, $el) => $(selPanel, $el), + transitionElement() { + return this.panel; + } + }, + connected() { + const el = this.panel || this.$el; + el.role = this.role; + if (this.overlay) { + el.ariaModal = true; + } + }, + beforeDisconnect() { + if (includes(active$1, this)) { + this.toggleElement(this.$el, false, false); + } + }, + events: [ + { + name: "click", + delegate: ({ selClose }) => `${selClose},a[href*="#"]`, + handler(e) { + const { current, defaultPrevented } = e; + const { hash } = current; + if (!defaultPrevented && hash && isSameSiteAnchor(current) && !this.$el.contains($(hash))) { + this.hide(); + } else if (matches(current, this.selClose)) { + maybeDefaultPreventClick(e); + this.hide(); + } + } + }, + { + name: "toggle", + self: true, + handler(e, toggle) { + if (e.defaultPrevented) { + return; + } + e.preventDefault(); + this.target = toggle == null ? void 0 : toggle.$el; + if (this.isToggled() === includes(active$1, this)) { + this.toggle(); + } + } + }, + { + name: "beforeshow", + self: true, + handler(e) { + if (includes(active$1, this)) { + return false; + } + if (!this.stack && active$1.length) { + Promise.all(active$1.map((modal) => modal.hide())).then(this.show); + e.preventDefault(); + } else { + active$1.push(this); + } + } + }, + { + name: "show", + self: true, + handler() { + if (this.stack) { + css(this.$el, "zIndex", toFloat(css(this.$el, "zIndex")) + active$1.length); + } + const handlers = [ + this.overlay && preventBackgroundFocus(this), + this.overlay && preventBackgroundScroll(this.$el), + this.bgClose && listenForBackgroundClose$1(this), + this.escClose && listenForEscClose$1(this) + ]; + once( + this.$el, + "hidden", + () => handlers.forEach((handler) => handler && handler()), + { self: true } + ); + addClass(document.documentElement, this.clsPage); + setAriaExpanded(this.target, true); + } + }, + { + name: "shown", + self: true, + handler() { + if (!isFocusable(this.$el)) { + this.$el.tabIndex = -1; + } + if (!matches(this.$el, ":focus-within")) { + this.$el.focus(); + } + } + }, + { + name: "hidden", + self: true, + handler() { + if (includes(active$1, this)) { + active$1.splice(active$1.indexOf(this), 1); + } + css(this.$el, "zIndex", ""); + const { target } = this; + if (!active$1.some((modal) => modal.clsPage === this.clsPage)) { + removeClass(document.documentElement, this.clsPage); + queueMicrotask(() => isFocusable(target) && target.focus()); + } + setAriaExpanded(target, false); + this.target = null; + } + } + ], + methods: { + toggle() { + return this.isToggled() ? this.hide() : this.show(); + }, + show() { + if (this.container && parent(this.$el) !== this.container) { + append(this.container, this.$el); + return new Promise( + (resolve) => requestAnimationFrame(() => this.show().then(resolve)) + ); + } + return this.toggleElement(this.$el, true, animate$1); + }, + hide() { + return this.toggleElement(this.$el, false, animate$1); + } + } + }; + function animate$1(el, show, { transitionElement, _toggle }) { + return new Promise( + (resolve, reject) => once(el, "show hide", () => { + var _a; + (_a = el._reject) == null ? void 0 : _a.call(el); + el._reject = reject; + _toggle(el, show); + const off = once( + transitionElement, + "transitionstart", + () => { + once(transitionElement, "transitionend transitioncancel", resolve, { + self: true + }); + clearTimeout(timer); + }, + { self: true } + ); + const timer = setTimeout( + () => { + off(); + resolve(); + }, + toMs(css(transitionElement, "transitionDuration")) + ); + }) + ).then(() => delete el._reject); + } + function toMs(time) { + return time ? endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3 : 0; + } + function preventBackgroundFocus(modal) { + return on(document, "focusin", (e) => { + if (last(active$1) === modal && !modal.$el.contains(e.target)) { + modal.$el.focus(); + } + }); + } + function listenForBackgroundClose$1(modal) { + return on(document, pointerDown$1, ({ target }) => { + if (last(active$1) !== modal || modal.overlay && !modal.$el.contains(target) || !modal.panel || modal.panel.contains(target)) { + return; + } + once( + document, + `${pointerUp$1} ${pointerCancel} scroll`, + ({ defaultPrevented, type, target: newTarget }) => { + if (!defaultPrevented && type === pointerUp$1 && target === newTarget) { + modal.hide(); + } + }, + true + ); + }); + } + function listenForEscClose$1(modal) { + return on(document, "keydown", (e) => { + if (e.keyCode === 27 && last(active$1) === modal) { + modal.hide(); + } + }); + } + function setAriaExpanded(el, toggled) { + if (el == null ? void 0 : el.ariaExpanded) { + el.ariaExpanded = toggled; + } + } + + var Animations$2 = { + slide: { + show(dir) { + return [{ transform: translate(dir * -100) }, { transform: translate() }]; + }, + percent(current) { + return translated(current); + }, + translate(percent, dir) { + return [ + { transform: translate(dir * -100 * percent) }, + { transform: translate(dir * 100 * (1 - percent)) } + ]; + } + } + }; + function translated(el) { + return Math.abs(new DOMMatrix(css(el, "transform")).m41 / el.offsetWidth); + } + function translate(value = 0, unit = "%") { + return value ? `translate3d(${value + unit}, 0, 0)` : ""; + } + + function Transitioner$1(prev, next, dir, { animation, easing }) { + const { percent, translate, show = noop } = animation; + const props = show(dir); + const { promise, resolve } = withResolvers(); + return { + dir, + show(duration, percent2 = 0, linear) { + const timing = linear ? "linear" : easing; + duration -= Math.round(duration * clamp(percent2, -1, 1)); + this.translate(percent2); + triggerUpdate(next, "itemin", { percent: percent2, duration, timing, dir }); + triggerUpdate(prev, "itemout", { percent: 1 - percent2, duration, timing, dir }); + Promise.all([ + Transition.start(next, props[1], duration, timing), + Transition.start(prev, props[0], duration, timing) + ]).then(() => { + this.reset(); + resolve(); + }, noop); + return promise; + }, + cancel() { + return Transition.cancel([next, prev]); + }, + reset() { + resetProps([next, prev], props[0]); + }, + async forward(duration, percent2 = this.percent()) { + await this.cancel(); + return this.show(duration, percent2, true); + }, + translate(percent2) { + this.reset(); + const props2 = translate(percent2, dir); + css(next, props2[1]); + css(prev, props2[0]); + triggerUpdate(next, "itemtranslatein", { percent: percent2, dir }); + triggerUpdate(prev, "itemtranslateout", { percent: 1 - percent2, dir }); + }, + percent() { + return percent(prev || next, next, dir); + }, + getDistance() { + return prev == null ? void 0 : prev.offsetWidth; + } + }; + } + function triggerUpdate(el, type, data) { + trigger(el, createEvent(type, false, false, data)); + } + function withResolvers() { + let resolve; + return { promise: new Promise((res) => resolve = res), resolve }; + } + + var I18n = { + props: { + i18n: Object + }, + data: { + i18n: null + }, + methods: { + t(key, ...params) { + var _a, _b, _c; + let i = 0; + return ((_c = ((_a = this.i18n) == null ? void 0 : _a[key]) || ((_b = this.$options.i18n) == null ? void 0 : _b[key])) == null ? void 0 : _c.replace( + /%s/g, + () => params[i++] || "" + )) || ""; + } + } + }; + + var SliderAutoplay = { + props: { + autoplay: Boolean, + autoplayInterval: Number, + pauseOnHover: Boolean + }, + data: { + autoplay: false, + autoplayInterval: 7e3, + pauseOnHover: true + }, + connected() { + attr(this.list, "aria-live", this.autoplay ? "off" : "polite"); + this.autoplay && this.startAutoplay(); + }, + disconnected() { + this.stopAutoplay(); + }, + update() { + attr(this.slides, "tabindex", "-1"); + }, + events: [ + { + name: "visibilitychange", + el: () => document, + filter: ({ autoplay }) => autoplay, + handler() { + if (document.hidden) { + this.stopAutoplay(); + } else { + this.startAutoplay(); + } + } + } + ], + methods: { + startAutoplay() { + this.stopAutoplay(); + this.interval = setInterval(() => { + if (!(this.stack.length || this.draggable && matches(this.$el, ":focus-within") && !matches(this.$el, ":focus") || this.pauseOnHover && matches(this.$el, ":hover"))) { + this.show("next"); + } + }, this.autoplayInterval); + }, + stopAutoplay() { + clearInterval(this.interval); + } + } + }; + + const pointerOptions = { passive: false, capture: true }; + const pointerUpOptions = { passive: true, capture: true }; + const pointerDown = "touchstart mousedown"; + const pointerMove = "touchmove mousemove"; + const pointerUp = "touchend touchcancel mouseup click input scroll"; + var SliderDrag = { + props: { + draggable: Boolean + }, + data: { + draggable: true, + threshold: 10 + }, + created() { + for (const key of ["start", "move", "end"]) { + const fn = this[key]; + this[key] = (e) => { + const pos = getEventPos(e).x * (isRtl ? -1 : 1); + this.prevPos = pos === this.pos ? this.prevPos : this.pos; + this.pos = pos; + fn(e); + }; + } + }, + events: [ + { + name: pointerDown, + passive: true, + delegate: ({ selList }) => `${selList} > *`, + handler(e) { + if (!this.draggable || this.parallax || !isTouch(e) && hasSelectableText(e.target) || e.target.closest(selInput) || e.button > 0 || this.length < 2) { + return; + } + this.start(e); + } + }, + { + name: "dragstart", + handler(e) { + e.preventDefault(); + } + }, + { + // iOS workaround for slider stopping if swiping fast + name: pointerMove, + el: ({ list }) => list, + handler: noop, + ...pointerOptions + } + ], + methods: { + start() { + this.drag = this.pos; + if (this._transitioner) { + this.percent = this._transitioner.percent(); + this.drag += this._transitioner.getDistance() * this.percent * this.dir; + this._transitioner.cancel(); + this._transitioner.translate(this.percent); + this.dragging = true; + this.stack = []; + } else { + this.prevIndex = this.index; + } + on(document, pointerMove, this.move, pointerOptions); + on(document, pointerUp, this.end, pointerUpOptions); + css(this.list, "userSelect", "none"); + }, + move(e) { + const distance = this.pos - this.drag; + if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) { + return; + } + e.cancelable && e.preventDefault(); + this.dragging = true; + this.dir = distance < 0 ? 1 : -1; + let { slides, prevIndex } = this; + let dis = Math.abs(distance); + let nextIndex = this.getIndex(prevIndex + this.dir); + let width = getDistance.call(this, prevIndex, nextIndex); + while (nextIndex !== prevIndex && dis > width) { + this.drag -= width * this.dir; + prevIndex = nextIndex; + dis -= width; + nextIndex = this.getIndex(prevIndex + this.dir); + width = getDistance.call(this, prevIndex, nextIndex); + } + this.percent = dis / width; + const prev = slides[prevIndex]; + const next = slides[nextIndex]; + const changed = this.index !== nextIndex; + const edge = prevIndex === nextIndex; + let itemShown; + for (const i of [this.index, this.prevIndex]) { + if (!includes([nextIndex, prevIndex], i)) { + trigger(slides[i], "itemhidden", [this]); + if (edge) { + itemShown = true; + this.prevIndex = prevIndex; + } + } + } + if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) { + trigger(slides[this.index], "itemshown", [this]); + } + if (changed) { + this.prevIndex = prevIndex; + this.index = nextIndex; + if (!edge) { + trigger(prev, "beforeitemhide", [this]); + trigger(prev, "itemhide", [this]); + } + trigger(next, "beforeitemshow", [this]); + trigger(next, "itemshow", [this]); + } + this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next); + }, + end() { + off(document, pointerMove, this.move, pointerOptions); + off(document, pointerUp, this.end, pointerUpOptions); + if (this.dragging) { + setTimeout(on(this.list, "click", (e) => e.preventDefault(), pointerOptions)); + this.dragging = null; + if (this.index === this.prevIndex) { + this.percent = 1 - this.percent; + this.dir *= -1; + this._show(false, this.index, true); + this._transitioner = null; + } else { + const dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos; + this.index = dirChange ? this.index : this.prevIndex; + if (dirChange) { + trigger(this.slides[this.prevIndex], "itemhidden", [this]); + trigger(this.slides[this.index], "itemshown", [this]); + this.percent = 1 - this.percent; + } + this.show( + this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? "next" : "previous", + true + ); + } + } + css(this.list, { userSelect: "" }); + this.drag = this.percent = null; + } + } + }; + function getDistance(prev, next) { + return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth; + } + function hasSelectableText(el) { + return css(el, "userSelect") !== "none" && toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim()); + } + + function initWatches(instance) { + instance._watches = []; + for (const watches of instance.$options.watch || []) { + for (const [name, watch] of Object.entries(watches)) { + registerWatch(instance, watch, name); + } + } + instance._initial = true; + } + function registerWatch(instance, watch, name) { + instance._watches.push({ + name, + ...isPlainObject(watch) ? watch : { handler: watch } + }); + } + function runWatches(instance, values) { + for (const { name, handler, immediate = true } of instance._watches) { + if (instance._initial && immediate || hasOwn(values, name) && !isEqual(values[name], instance[name])) { + handler.call(instance, instance[name], values[name]); + } + } + instance._initial = false; + } + + function initComputed(instance) { + const { computed } = instance.$options; + instance._computed = {}; + if (computed) { + for (const key in computed) { + registerComputed(instance, key, computed[key]); + } + } + } + const mutationOptions = { subtree: true, childList: true }; + function registerComputed(instance, key, cb) { + instance._hasComputed = true; + Object.defineProperty(instance, key, { + enumerable: true, + get() { + const { _computed, $props, $el } = instance; + if (!hasOwn(_computed, key)) { + _computed[key] = (cb.get || cb).call(instance, $props, $el); + if (cb.observe && instance._computedObserver) { + const selector = cb.observe.call(instance, $props); + instance._computedObserver.observe( + ["~", "+", "-"].includes(selector[0]) ? $el.parentElement : $el.getRootNode(), + mutationOptions + ); + } + } + return _computed[key]; + }, + set(value) { + const { _computed } = instance; + _computed[key] = cb.set ? cb.set.call(instance, value) : value; + if (isUndefined(_computed[key])) { + delete _computed[key]; + } + } + }); + } + function initComputedUpdates(instance) { + if (!instance._hasComputed) { + return; + } + prependUpdate(instance, { + read: () => runWatches(instance, resetComputed(instance)), + events: ["resize", "computed"] + }); + instance._computedObserver = observeMutation( + instance.$el, + () => callUpdate(instance, "computed"), + mutationOptions + ); + instance._disconnect.push(() => { + instance._computedObserver.disconnect(); + instance._computedObserver = null; + resetComputed(instance); + }); + } + function resetComputed(instance) { + const values = { ...instance._computed }; + instance._computed = {}; + return values; + } + + function initEvents(instance) { + for (const event of instance.$options.events || []) { + if (hasOwn(event, "handler")) { + registerEvent(instance, event); + } else { + for (const key in event) { + registerEvent(instance, { name: key, handler: event[key] }); + } + } + } + } + function registerEvent(instance, { name, el, handler, capture, passive, delegate, filter, self }) { + if (filter && !filter.call(instance, instance)) { + return; + } + instance._disconnect.push( + on( + el ? el.call(instance, instance) : instance.$el, + name, + delegate == null ? void 0 : delegate.call(instance, instance), + handler.bind(instance), + { + passive, + capture, + self + } + ) + ); + } + + function initObservers(instance) { + for (const observer of instance.$options.observe || []) { + registerObservable(instance, observer); + } + } + function registerObservable(instance, observable) { + let { observe, target = instance.$el, handler, options, filter, args } = observable; + if (filter && !filter.call(instance, instance)) { + return; + } + const key = `_observe${instance._disconnect.length}`; + if (isFunction(target) && !hasOwn(instance, key)) { + registerComputed(instance, key, () => { + const targets2 = target.call(instance, instance); + return isArray(targets2) ? toNodes(targets2) : targets2; + }); + } + handler = isString(handler) ? instance[handler] : handler.bind(instance); + if (isFunction(options)) { + options = options.call(instance, instance); + } + const targets = hasOwn(instance, key) ? instance[key] : target; + const observer = observe(targets, handler, options, args); + if (isFunction(target) && isArray(instance[key])) { + registerWatch( + instance, + { handler: updateTargets(observer, options), immediate: false }, + key + ); + } + instance._disconnect.push(() => observer.disconnect()); + } + function updateTargets(observer, options) { + return (targets, prev) => { + for (const target of prev) { + if (!includes(targets, target)) { + if (observer.unobserve) { + observer.unobserve(target); + } else if (observer.observe) { + observer.disconnect(); + } + } + } + for (const target of targets) { + if (!includes(prev, target) || !observer.unobserve) { + observer.observe(target, options); + } + } + }; + } + + function initProps(instance) { + const { $options, $props } = instance; + const props = getProps($options); + assign($props, props); + const { computed, methods } = $options; + for (let key in $props) { + if (key in props && (!computed || !hasOwn(computed, key)) && (!methods || !hasOwn(methods, key))) { + instance[key] = $props[key]; + } + } + } + function getProps(opts) { + const data$1 = {}; + const { args = [], props = {}, el, id } = opts; + if (!props) { + return data$1; + } + for (const key in props) { + const prop = hyphenate(key); + let value = data(el, prop); + if (isUndefined(value)) { + continue; + } + value = props[key] === Boolean && value === "" ? true : coerce$1(props[key], value); + if (prop === "target" && startsWith(value, "_")) { + continue; + } + data$1[key] = value; + } + const options = parseOptions(data(el, id), args); + for (const key in options) { + const prop = camelize(key); + if (!isUndefined(props[prop])) { + data$1[prop] = coerce$1(props[prop], options[key]); + } + } + return data$1; + } + const getAttributes = memoize((id, props) => { + const attributes = Object.keys(props); + const filter = attributes.concat(id).map((key) => [hyphenate(key), `data-${hyphenate(key)}`]).flat(); + return { attributes, filter }; + }); + function initPropsObserver(instance) { + const { $options, $props } = instance; + const { id, props, el } = $options; + if (!props) { + return; + } + const { attributes, filter } = getAttributes(id, props); + const observer = new MutationObserver((records) => { + const data = getProps($options); + if (records.some(({ attributeName }) => { + const prop = attributeName.replace("data-", ""); + return (prop === id ? attributes : [camelize(prop), camelize(attributeName)]).some( + (prop2) => !isUndefined(data[prop2]) && data[prop2] !== $props[prop2] + ); + })) { + instance.$reset(); + } + }); + observer.observe(el, { + attributes: true, + attributeFilter: filter + }); + instance._disconnect.push(() => observer.disconnect()); + } + + function callHook(instance, hook) { + var _a; + (_a = instance.$options[hook]) == null ? void 0 : _a.forEach((handler) => handler.call(instance)); + } + function callConnected(instance) { + if (instance._connected) { + return; + } + initProps(instance); + callHook(instance, "beforeConnect"); + instance._connected = true; + instance._disconnect = []; + initEvents(instance); + initUpdates(instance); + initWatches(instance); + initObservers(instance); + initPropsObserver(instance); + initComputedUpdates(instance); + callHook(instance, "connected"); + callUpdate(instance); + } + function callDisconnected(instance) { + if (!instance._connected) { + return; + } + callHook(instance, "beforeDisconnect"); + instance._disconnect.forEach((off) => off()); + instance._disconnect = null; + callHook(instance, "disconnected"); + instance._connected = false; + } + + let uid = 0; + function init$1(instance, options = {}) { + options.data = normalizeData(options, instance.constructor.options); + instance.$options = mergeOptions(instance.constructor.options, options, instance); + instance.$props = {}; + instance._uid = uid++; + initData(instance); + initMethods(instance); + initComputed(instance); + callHook(instance, "created"); + if (options.el) { + instance.$mount(options.el); + } + } + function initData(instance) { + const { data = {} } = instance.$options; + for (const key in data) { + instance.$props[key] = instance[key] = data[key]; + } + } + function initMethods(instance) { + const { methods } = instance.$options; + if (methods) { + for (const key in methods) { + instance[key] = methods[key].bind(instance); + } + } + } + function normalizeData({ data = {} }, { args = [], props = {} }) { + if (isArray(data)) { + data = data.slice(0, args.length).reduce((data2, value, index) => { + if (isPlainObject(value)) { + assign(data2, value); + } else { + data2[args[index]] = value; + } + return data2; + }, {}); + } + for (const key in data) { + if (isUndefined(data[key])) { + delete data[key]; + } else if (props[key]) { + data[key] = coerce$1(props[key], data[key]); + } + } + return data; + } + + const App = function(options) { + init$1(this, options); + }; + App.util = util; + App.options = {}; + App.version = "3.23.12"; + + const PREFIX = "uk-"; + const DATA = "__uikit__"; + const components$2 = {}; + function component(name, options) { + var _a, _b; + const id = PREFIX + hyphenate(name); + if (!options) { + if (!components$2[id].options) { + components$2[id] = App.extend(components$2[id]); + } + return components$2[id]; + } + name = camelize(name); + App[name] = (element, data) => createComponent(name, element, data); + const opt = (_a = options.options) != null ? _a : { ...options }; + opt.id = id; + opt.name = name; + (_b = opt.install) == null ? void 0 : _b.call(opt, App, opt, name); + if (App._initialized && !opt.functional) { + requestAnimationFrame(() => createComponent(name, `[${id}],[data-${id}]`)); + } + return components$2[id] = opt; + } + function createComponent(name, element, data, ...args) { + const Component = component(name); + return Component.options.functional ? new Component({ data: isPlainObject(element) ? element : [element, data, ...args] }) : element ? $$(element).map(init)[0] : init(); + function init(element2) { + const instance = getComponent(element2, name); + if (instance) { + if (data) { + instance.$destroy(); + } else { + return instance; + } + } + return new Component({ el: element2, data }); + } + } + function getComponents(element) { + return (element == null ? void 0 : element[DATA]) || {}; + } + function getComponent(element, name) { + return getComponents(element)[name]; + } + function attachToElement(element, instance) { + if (!element[DATA]) { + element[DATA] = {}; + } + element[DATA][instance.$options.name] = instance; + } + function detachFromElement(element, instance) { + var _a; + (_a = element[DATA]) == null ? true : delete _a[instance.$options.name]; + if (isEmpty(element[DATA])) { + delete element[DATA]; + } + } + + function globalApi(App) { + App.component = component; + App.getComponents = getComponents; + App.getComponent = getComponent; + App.update = update; + App.use = function(plugin) { + if (plugin.installed) { + return; + } + plugin.call(null, this); + plugin.installed = true; + return this; + }; + App.mixin = function(mixin, component2) { + component2 = (isString(component2) ? this.component(component2) : component2) || this; + component2.options = mergeOptions(component2.options, mixin); + }; + App.extend = function(options) { + options || (options = {}); + const Super = this; + const Sub = function UIkitComponent(options2) { + init$1(this, options2); + }; + Sub.prototype = Object.create(Super.prototype); + Sub.prototype.constructor = Sub; + Sub.options = mergeOptions(Super.options, options); + Sub.super = Super; + Sub.extend = Super.extend; + return Sub; + }; + let container; + Object.defineProperty(App, "container", { + get() { + return container || document.body; + }, + set(element) { + container = $(element); + } + }); + } + function update(element, e) { + element = element ? toNode(element) : document.body; + for (const parentEl of parents(element).reverse()) { + updateElement(parentEl, e); + } + apply(element, (element2) => updateElement(element2, e)); + } + function updateElement(element, e) { + const components = getComponents(element); + for (const name in components) { + callUpdate(components[name], e); + } + } + + function instanceApi(App) { + App.prototype.$mount = function(el) { + const instance = this; + attachToElement(el, instance); + instance.$options.el = el; + if (el.isConnected) { + callConnected(instance); + } + }; + App.prototype.$destroy = function(removeEl = false) { + const instance = this; + const { el } = instance.$options; + if (el) { + callDisconnected(instance); + } + callHook(instance, "destroy"); + detachFromElement(el, instance); + if (removeEl) { + remove$1(instance.$el); + } + }; + App.prototype.$create = createComponent; + App.prototype.$emit = function(e) { + callUpdate(this, e); + }; + App.prototype.$update = function(element = this.$el, e) { + update(element, e); + }; + App.prototype.$reset = function() { + callDisconnected(this); + callConnected(this); + }; + App.prototype.$getComponent = getComponent; + Object.defineProperties(App.prototype, { + $el: { + get() { + return this.$options.el; + } + }, + $container: Object.getOwnPropertyDescriptor(App, "container") + }); + } + let id = 1; + function generateId(instance, el = null) { + return (el == null ? void 0 : el.id) || `${instance.$options.id}-${id++}`; + } + + var SliderNav = { + i18n: { + next: "Next slide", + previous: "Previous slide", + slideX: "Slide %s", + slideLabel: "%s of %s", + role: "String" + }, + data: { + selNav: false, + role: "region" + }, + computed: { + nav: ({ selNav }, $el) => $(selNav, $el), + navChildren() { + return children(this.nav); + }, + selNavItem: ({ attrItem }) => `[${attrItem}],[data-${attrItem}]`, + navItems(_, $el) { + return $$(this.selNavItem, $el); + } + }, + watch: { + nav(nav, prev) { + attr(nav, "role", "tablist"); + this.padNavitems(); + if (prev) { + this.$emit(); + } + }, + list(list) { + if (isTag(list, "ul")) { + attr(list, "role", "presentation"); + } + }, + navChildren(children2) { + attr(children2, "role", "presentation"); + this.padNavitems(); + this.updateNav(); + }, + navItems(items) { + for (const el of items) { + const cmd = data(el, this.attrItem); + const button = $("a,button", el) || el; + let ariaLabel; + let ariaControls = null; + if (isNumeric(cmd)) { + const item = toNumber(cmd); + const slide = this.slides[item]; + if (slide) { + if (!slide.id) { + slide.id = generateId(this, slide); + } + ariaControls = slide.id; + } + ariaLabel = this.t("slideX", toFloat(cmd) + 1); + button.role = "tab"; + } else { + if (this.list) { + if (!this.list.id) { + this.list.id = generateId(this, this.list); + } + ariaControls = this.list.id; + } + ariaLabel = this.t(cmd); + } + button.ariaControls = ariaControls; + button.ariaLabel = button.ariaLabel || ariaLabel; + } + }, + slides(slides) { + slides.forEach( + (slide, i) => attr(slide, { + role: this.nav ? "tabpanel" : "group", + "aria-label": this.t("slideLabel", i + 1, this.length), + "aria-roledescription": this.nav ? null : "slide" + }) + ); + this.padNavitems(); + } + }, + connected() { + this.$el.role = this.role; + this.$el.ariaRoleDescription = "carousel"; + }, + update: [ + { + write() { + this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex)); + this.updateNav(); + }, + events: ["resize"] + } + ], + events: [ + { + name: "click keydown", + delegate: ({ selNavItem }) => selNavItem, + filter: ({ parallax }) => !parallax, + handler(e) { + if (e.target.closest("a,button") && (e.type === "click" || e.keyCode === keyMap.SPACE)) { + maybeDefaultPreventClick(e); + this.show(data(e.current, this.attrItem)); + } + } + }, + { + name: "itemshow", + handler() { + this.updateNav(); + } + }, + { + name: "keydown", + delegate: ({ selNavItem }) => selNavItem, + filter: ({ parallax }) => !parallax, + handler(e) { + const { current, keyCode } = e; + const cmd = data(current, this.attrItem); + if (!isNumeric(cmd)) { + return; + } + let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT ? "previous" : keyCode === keyMap.RIGHT ? "next" : -1; + if (~i) { + e.preventDefault(); + this.show(i); + } + } + } + ], + methods: { + updateNav() { + const index = this.getValidIndex(); + for (const el of this.navItems) { + const cmd = data(el, this.attrItem); + const button = $("a,button", el) || el; + if (isNumeric(cmd)) { + const item = toNumber(cmd); + const active = item === index; + toggleClass(el, this.clsActive, active); + toggleClass(button, "uk-disabled", !!this.parallax); + button.ariaSelected = active; + button.tabIndex = active && !this.parallax ? null : -1; + if (active && button && matches(parent(el), ":focus-within")) { + button.focus(); + } + } else { + toggleClass( + el, + "uk-invisible", + this.finite && (cmd === "previous" && index === 0 || cmd === "next" && index >= this.maxIndex) + ); + } + } + }, + padNavitems() { + if (!this.nav) { + return; + } + const children2 = []; + for (let i = 0; i < this.length; i++) { + const attr2 = `${this.attrItem}="${i}"`; + children2[i] = this.navChildren.findLast((el) => el.matches(`[${attr2}]`)) || $(`
  • `); + } + if (!isEqual(children2, this.navChildren)) { + html(this.nav, children2); + } + } + } + }; + + const easeOutQuad = "cubic-bezier(0.25, 0.46, 0.45, 0.94)"; + const easeOutQuart = "cubic-bezier(0.165, 0.84, 0.44, 1)"; + var Slider = { + mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n], + props: { + clsActivated: String, + easing: String, + index: Number, + finite: Boolean, + velocity: Number + }, + data: () => ({ + easing: "ease", + finite: false, + velocity: 1, + index: 0, + prevIndex: -1, + stack: [], + percent: 0, + clsActive: "uk-active", + clsActivated: "", + clsEnter: "uk-slide-enter", + clsLeave: "uk-slide-leave", + clsSlideActive: "uk-slide-active", + Transitioner: false, + transitionOptions: {} + }), + connected() { + this.prevIndex = -1; + this.index = this.getValidIndex(this.$props.index); + this.stack = []; + }, + disconnected() { + removeClass(this.slides, this.clsActive); + }, + computed: { + duration: ({ velocity }, $el) => speedUp($el.offsetWidth / velocity), + list: ({ selList }, $el) => $(selList, $el), + maxIndex() { + return this.length - 1; + }, + slides() { + return children(this.list); + }, + length() { + return this.slides.length; + } + }, + watch: { + slides(slides, prev) { + if (prev) { + this.$emit(); + } + } + }, + events: { + itemshow({ target }) { + addClass(target, this.clsEnter, this.clsSlideActive); + }, + itemshown({ target }) { + removeClass(target, this.clsEnter); + }, + itemhide({ target }) { + addClass(target, this.clsLeave); + }, + itemhidden({ target }) { + removeClass(target, this.clsLeave, this.clsSlideActive); + } + }, + methods: { + async show(index, force = false) { + var _a; + if (this.dragging || !this.length || this.parallax) { + return; + } + const { stack } = this; + const queueIndex = force ? 0 : stack.length; + const reset = () => { + stack.splice(queueIndex, 1); + if (stack.length) { + this.show(stack.shift(), true); + } + }; + stack[force ? "unshift" : "push"](index); + if (!force && stack.length > 1) { + if (stack.length === 2) { + (_a = this._transitioner) == null ? void 0 : _a.forward(Math.min(this.duration, 200)); + } + return; + } + const prevIndex = this.getIndex(this.index); + const prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex]; + const nextIndex = this.getIndex(index, this.index); + const next = this.slides[nextIndex]; + if (prev === next) { + reset(); + return; + } + this.dir = getDirection(index, prevIndex); + this.prevIndex = prevIndex; + this.index = nextIndex; + if (prev && !trigger(prev, "beforeitemhide", [this]) || !trigger(next, "beforeitemshow", [this, prev])) { + this.index = this.prevIndex; + reset(); + return; + } + prev && trigger(prev, "itemhide", [this]); + trigger(next, "itemshow", [this]); + await this._show(prev, next, force); + prev && trigger(prev, "itemhidden", [this]); + trigger(next, "itemshown", [this]); + stack.shift(); + this._transitioner = null; + if (stack.length) { + requestAnimationFrame(() => stack.length && this.show(stack.shift(), true)); + } + }, + getIndex(index = this.index, prev = this.index) { + return clamp( + getIndex(index, this.slides, prev, this.finite), + 0, + Math.max(0, this.maxIndex) + ); + }, + getValidIndex(index = this.index, prevIndex = this.prevIndex) { + return this.getIndex(index, prevIndex); + }, + async _show(prev, next, force) { + this._transitioner = this._getTransitioner(prev, next, this.dir, { + easing: force ? next.offsetWidth < 600 ? easeOutQuad : easeOutQuart : this.easing, + ...this.transitionOptions + }); + if (!force && !prev) { + this._translate(1); + return; + } + const { length } = this.stack; + return this._transitioner[length > 1 ? "forward" : "show"]( + length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, + this.percent + ); + }, + _translate(percent, prev = this.prevIndex, next = this.index) { + const transitioner = this._getTransitioner(prev === next ? false : prev, next); + transitioner.translate(percent); + return transitioner; + }, + _getTransitioner(prev = this.prevIndex, next = this.index, dir = this.dir || 1, options = this.transitionOptions) { + return new this.Transitioner( + isNumber(prev) ? this.slides[prev] : prev, + isNumber(next) ? this.slides[next] : next, + dir * (isRtl ? -1 : 1), + options + ); + } + } + }; + function getDirection(index, prevIndex) { + return index === "next" ? 1 : index === "previous" ? -1 : index < prevIndex ? -1 : 1; + } + function speedUp(x) { + return 0.5 * x + 300; + } + + var Slideshow = { + mixins: [Slider], + props: { + animation: String + }, + data: { + animation: "slide", + clsActivated: "uk-transition-active", + Animations: Animations$2, + Transitioner: Transitioner$1 + }, + computed: { + animation({ animation, Animations: Animations2 }) { + return { ...Animations2[animation] || Animations2.slide, name: animation }; + }, + transitionOptions() { + return { animation: this.animation }; + } + }, + observe: resize(), + events: { + itemshow({ target }) { + addClass(target, this.clsActive); + }, + itemshown({ target }) { + addClass(target, this.clsActivated); + }, + itemhidden({ target }) { + removeClass(target, this.clsActive, this.clsActivated); + } + } + }; + + var Animations$1 = { + ...Animations$2, + fade: { + show() { + return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }]; + }, + percent(current) { + return 1 - css(current, "opacity"); + }, + translate(percent) { + return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }]; + } + }, + scale: { + show() { + return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }]; + }, + percent(current) { + return 1 - css(current, "opacity"); + }, + translate(percent) { + return [ + { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 }, + { zIndex: -1 } + ]; + } + }, + pull: { + show(dir) { + return dir < 0 ? [ + { transform: translate(30), zIndex: -1 }, + { transform: translate(), zIndex: 0 } + ] : [ + { transform: translate(-100), zIndex: 0 }, + { transform: translate(), zIndex: -1 } + ]; + }, + percent(current, next, dir) { + return dir < 0 ? 1 - translated(next) : translated(current); + }, + translate(percent, dir) { + return dir < 0 ? [ + { transform: translate(30 * percent), zIndex: -1 }, + { transform: translate(-100 * (1 - percent)), zIndex: 0 } + ] : [ + { transform: translate(-percent * 100), zIndex: 0 }, + { transform: translate(30 * (1 - percent)), zIndex: -1 } + ]; + } + }, + push: { + show(dir) { + return dir < 0 ? [ + { transform: translate(100), zIndex: 0 }, + { transform: translate(), zIndex: -1 } + ] : [ + { transform: translate(-30), zIndex: -1 }, + { transform: translate(), zIndex: 0 } + ]; + }, + percent(current, next, dir) { + return dir > 0 ? 1 - translated(next) : translated(current); + }, + translate(percent, dir) { + return dir < 0 ? [ + { transform: translate(percent * 100), zIndex: 0 }, + { transform: translate(-30 * (1 - percent)), zIndex: -1 } + ] : [ + { transform: translate(-30 * percent), zIndex: -1 }, + { transform: translate(100 * (1 - percent)), zIndex: 0 } + ]; + } + } + }; + function scale3d(value) { + return `scale3d(${value}, ${value}, 1)`; + } + + var Animations = { + ...Animations$2, + fade: { + show() { + return [{ opacity: 0 }, { opacity: 1 }]; + }, + percent(current) { + return 1 - css(current, "opacity"); + }, + translate(percent) { + return [{ opacity: 1 - percent }, { opacity: percent }]; + } + }, + scale: { + show() { + return [ + { opacity: 0, transform: scale3d(1 - 0.2) }, + { opacity: 1, transform: scale3d(1) } + ]; + }, + percent(current) { + return 1 - css(current, "opacity"); + }, + translate(percent) { + return [ + { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) }, + { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) } + ]; + } + } + }; + + var LightboxPanel = { + i18n: { + counter: "%s / %s" + }, + mixins: [Modal, Slideshow], + functional: true, + props: { + counter: Boolean, + preload: Number, + nav: Boolean, + slidenav: Boolean, + delayControls: Number, + videoAutoplay: Boolean, + template: String + }, + data: () => ({ + counter: false, + preload: 1, + nav: false, + slidenav: true, + delayControls: 3e3, + videoAutoplay: false, + items: [], + cls: "uk-open", + clsPage: "uk-lightbox-page", + clsFit: "uk-lightbox-items-fit", + clsZoom: "uk-lightbox-zoom", + attrItem: "uk-lightbox-item", + selList: ".uk-lightbox-items", + selClose: ".uk-close-large", + selNav: ".uk-lightbox-thumbnav, .uk-lightbox-dotnav", + selCaption: ".uk-lightbox-caption", + selCounter: ".uk-lightbox-counter", + pauseOnHover: false, + velocity: 2, + Animations, + template: `
        ` + }), + created() { + let $el = $(this.template); + if (isTag($el, "template")) { + $el = fragment(html($el)); + } + const list = $(this.selList, $el); + const navType = this.$props.nav; + remove$1($$(this.selNav, $el).filter((el) => !matches(el, `.uk-${navType}`))); + for (const [i, item] of this.items.entries()) { + append(list, "
        "); + if (navType === "thumbnav") { + wrapAll( + toThumbnavItem(item, this.videoAutoplay), + append($(this.selNav, $el), `
      • `) + ); + } + } + if (!this.slidenav) { + remove$1($$(".uk-lightbox-slidenav", $el)); + } + if (!this.counter) { + remove$1($(this.selCounter, $el)); + } + addClass(list, this.clsFit); + const close = $("[uk-close]", $el); + const closeLabel = this.t("close"); + if (close && closeLabel) { + close.dataset.i18n = JSON.stringify({ label: closeLabel }); + } + this.$mount(append(this.container, $el)); + }, + events: [ + { + name: "click", + self: true, + filter: ({ bgClose }) => bgClose, + delegate: ({ selList }) => `${selList} > *`, + handler(e) { + if (!e.defaultPrevented) { + this.hide(); + } + } + }, + { + name: "click", + self: true, + delegate: ({ clsZoom }) => `.${clsZoom}`, + handler(e) { + if (!e.defaultPrevented) { + toggleClass(this.list, this.clsFit); + } + } + }, + { + name: `${pointerMove$1} ${pointerDown$1} keydown`, + filter: ({ delayControls }) => delayControls, + handler() { + this.showControls(); + } + }, + { + name: "shown", + self: true, + handler() { + this.showControls(); + } + }, + { + name: "hide", + self: true, + handler() { + this.hideControls(); + removeClass(this.slides, this.clsActive); + Transition.stop(this.slides); + } + }, + { + name: "hidden", + self: true, + handler() { + this.$destroy(true); + } + }, + { + name: "keyup", + el: () => document, + handler({ keyCode }) { + if (!this.isToggled() || !this.draggable) { + return; + } + let i = -1; + if (keyCode === keyMap.LEFT) { + i = "previous"; + } else if (keyCode === keyMap.RIGHT) { + i = "next"; + } else if (keyCode === keyMap.HOME) { + i = 0; + } else if (keyCode === keyMap.END) { + i = "last"; + } + if (~i) { + this.show(i); + } + } + }, + { + name: "beforeitemshow", + handler(e) { + html($(this.selCaption, this.$el), this.getItem().caption || ""); + html( + $(this.selCounter, this.$el), + this.t("counter", this.index + 1, this.slides.length) + ); + for (let j = -this.preload; j <= this.preload; j++) { + this.loadItem(this.index + j); + } + if (this.isToggled()) { + return; + } + this.draggable = false; + e.preventDefault(); + this.toggleElement(this.$el, true, false); + this.animation = Animations.scale; + removeClass(e.target, this.clsActive); + this.stack.splice(1, 0, this.index); + } + }, + { + name: "itemshown", + handler() { + this.draggable = this.$props.draggable; + } + }, + { + name: "itemload", + async handler(_, item) { + const { source: src, type, attrs = {} } = item; + this.setItem(item, ""); + if (!src) { + return; + } + let matches2; + const iframeAttrs = { + allowfullscreen: "", + style: "max-width: 100%; box-sizing: border-box;", + "uk-responsive": "", + "uk-video": `${Boolean(this.videoAutoplay)}` + }; + if (type === "image" || isImage(src)) { + const img = createEl("img"); + wrapInPicture(img, item.sources); + attr(img, { + src, + ...pick(item, ["alt", "srcset", "sizes"]), + ...attrs + }); + on(img, "load", () => this.setItem(item, parent(img) || img)); + on(img, "error", () => this.setError(item)); + } else if (type === "video" || isVideo(src)) { + const inline = this.videoAutoplay === "inline"; + const video = createEl("video", { + src, + playsinline: "", + controls: inline ? null : "", + loop: inline ? "" : null, + poster: this.videoAutoplay ? null : item.poster, + "uk-video": inline ? "automute: true" : Boolean(this.videoAutoplay), + ...attrs + }); + on(video, "loadedmetadata", () => this.setItem(item, video)); + on(video, "error", () => this.setError(item)); + } else if (type === "iframe" || src.match(/\.(html|php)($|\?)/i)) { + this.setItem( + item, + createEl("iframe", { + src, + allowfullscreen: "", + class: "uk-lightbox-iframe", + ...attrs + }) + ); + } else if (matches2 = src.match( + /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/ + )) { + this.setItem( + item, + createEl("iframe", { + src: `https://www.youtube${matches2[1] || ""}.com/embed/${matches2[2]}${matches2[3] ? `?${matches2[3]}` : ""}`, + width: 1920, + height: 1080, + ...iframeAttrs, + ...attrs + }) + ); + } else if (matches2 = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/)) { + try { + const { height, width } = await (await fetch( + `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI( + src + )}`, + { credentials: "omit" } + )).json(); + this.setItem( + item, + createEl("iframe", { + src: `https://player.vimeo.com/video/${matches2[1]}${matches2[2] ? `?${matches2[2]}` : ""}`, + width, + height, + ...iframeAttrs, + ...attrs + }) + ); + } catch (e) { + this.setError(item); + } + } + } + }, + { + name: "itemloaded", + handler() { + this.$emit("resize"); + } + } + ], + update: { + read() { + for (const media of $$(`${this.selList} :not([controls]):is(img,video)`, this.$el)) { + toggleClass( + media, + this.clsZoom, + (media.naturalHeight || media.videoHeight) - this.$el.offsetHeight > Math.max( + 0, + (media.naturalWidth || media.videoWidth) - this.$el.offsetWidth + ) + ); + } + }, + events: ["resize"] + }, + methods: { + loadItem(index = this.index) { + const item = this.getItem(index); + if (!this.getSlide(item).childElementCount) { + trigger(this.$el, "itemload", [item]); + } + }, + getItem(index = this.index) { + return this.items[getIndex(index, this.slides)]; + }, + setItem(item, content) { + trigger(this.$el, "itemloaded", [this, html(this.getSlide(item), content)]); + }, + getSlide(item) { + return this.slides[this.items.indexOf(item)]; + }, + setError(item) { + this.setItem(item, ''); + }, + showControls() { + clearTimeout(this.controlsTimer); + this.controlsTimer = this.delayControls && setTimeout(this.hideControls, this.delayControls); + addClass(this.$el, "uk-active", "uk-transition-active"); + }, + hideControls() { + removeClass(this.$el, "uk-active", "uk-transition-active"); + } + } + }; + function createEl(tag, attrs) { + const el = fragment(`<${tag}>`); + attr(el, attrs); + return el; + } + function toThumbnavItem(item, videoAutoplay) { + const el = item.poster || item.thumb && (item.type === "image" || isImage(item.thumb)) ? createEl("img", { src: item.poster || item.thumb, alt: "" }) : item.thumb && (item.type === "video" || isVideo(item.thumb)) ? createEl("video", { + src: item.thumb, + loop: "", + playsinline: "", + "uk-video": `autoplay: ${Boolean(videoAutoplay)}; automute: true` + }) : createEl("canvas"); + if (item.thumbRatio) { + el.style.aspectRatio = item.thumbRatio; + } + return el; + } + function isImage(src) { + return src == null ? void 0 : src.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i); + } + function isVideo(src) { + return src == null ? void 0 : src.match(/\.(mp4|webm|ogv)($|\?)/i); + } + + const selDisabled$1 = ".uk-disabled *, .uk-disabled, [disabled]"; + var lightbox = { + install: install$3, + props: { toggle: String }, + data: { toggle: "a" }, + computed: { + toggles: ({ toggle }, $el) => $$(toggle, $el) + }, + watch: { + toggles(toggles) { + this.hide(); + for (const toggle of toggles) { + if (isTag(toggle, "a")) { + toggle.role = "button"; + } + } + } + }, + disconnected() { + this.hide(); + }, + events: { + name: "click", + delegate: ({ toggle }) => toggle, + handler(e) { + if (!e.defaultPrevented) { + e.preventDefault(); + if (!matches(e.current, selDisabled$1)) { + this.show(e.current); + } + } + } + }, + methods: { + show(index) { + let items = this.toggles.map(toItem); + if (this.nav === "thumbnav") { + ensureThumb.call(this, this.toggles, items); + } + items = uniqueBy(items, "source"); + if (isElement(index)) { + const { source } = toItem(index); + index = findIndex(items, ({ source: src }) => source === src); + } + this.panel = this.panel || this.$create("lightboxPanel", { ...this.$props, items }); + on(this.panel.$el, "hidden", () => this.panel = null); + return this.panel.show(index); + }, + hide() { + var _a; + return (_a = this.panel) == null ? void 0 : _a.hide(); + } + } + }; + function install$3(UIkit, Lightbox) { + if (!UIkit.lightboxPanel) { + UIkit.component("lightboxPanel", LightboxPanel); + } + assign(Lightbox.props, UIkit.component("lightboxPanel").options.props); + } + function ensureThumb(toggles, items) { + for (const [i, toggle] of Object.entries(toggles)) { + if (items[i].thumb) { + continue; + } + const parent = parents(toggle).reverse().concat(toggle).find( + (parent2) => this.$el.contains(parent2) && (parent2 === toggle || $$(this.toggle, parent2).length === 1) + ); + if (!parent) { + continue; + } + const media = $("img,video", parent); + if (media) { + items[i].thumb = media.currentSrc || media.poster || media.src; + items[i].thumbRatio = (media.naturalWidth || media.videoWidth) / (media.naturalHeight || media.videoHeight); + } + } + } + function toItem(el) { + const item = {}; + for (const attribute of el.getAttributeNames()) { + const key = attribute.replace(/^data-/, ""); + item[key === "href" ? "source" : key] = el.getAttribute(attribute); + } + item.attrs = parseOptions(item.attrs); + return item; + } + + var notification = { + mixins: [Container], + functional: true, + args: ["message", "status"], + data: { + message: "", + status: "", + timeout: 5e3, + group: "", + pos: "top-center", + clsContainer: "uk-notification", + clsClose: "uk-notification-close", + clsMsg: "uk-notification-message" + }, + install: install$2, + computed: { + marginProp: ({ pos }) => `margin-${pos.match(/[a-z]+(?=-)/)[0]}`, + startProps() { + return { opacity: 0, [this.marginProp]: -this.$el.offsetHeight }; + } + }, + created() { + const posClass = `${this.clsContainer}-${this.pos}`; + const containerAttr = `data-${this.clsContainer}-container`; + const container = $(`.${posClass}[${containerAttr}]`, this.container) || append( + this.container, + `
        ` + ); + this.$mount( + append( + container, + `` + ) + ); + }, + async connected() { + const margin = toFloat(css(this.$el, this.marginProp)); + await Transition.start(css(this.$el, this.startProps), { + opacity: 1, + [this.marginProp]: margin + }); + if (this.timeout) { + this.timer = setTimeout(this.close, this.timeout); + } + }, + events: { + click(e) { + maybeDefaultPreventClick(e); + this.close(); + }, + [pointerEnter]() { + if (this.timer) { + clearTimeout(this.timer); + } + }, + [pointerLeave]() { + if (this.timeout) { + this.timer = setTimeout(this.close, this.timeout); + } + } + }, + methods: { + async close(immediate) { + const removeFn = (el) => { + const container = parent(el); + trigger(el, "close", [this]); + remove$1(el); + if (!(container == null ? void 0 : container.hasChildNodes())) { + remove$1(container); + } + }; + if (this.timer) { + clearTimeout(this.timer); + } + if (!immediate) { + await Transition.start(this.$el, this.startProps); + } + removeFn(this.$el); + } + } + }; + function install$2(UIkit) { + UIkit.notification.closeAll = function(group, immediate) { + apply(document.body, (el) => { + const notification = UIkit.getComponent(el, "notification"); + if (notification && (!group || group === notification.group)) { + notification.close(immediate); + } + }); + }; + } + + var Media = { + props: { + media: Boolean + }, + data: { + media: false + }, + connected() { + const media = toMedia(this.media, this.$el); + this.matchMedia = true; + if (media) { + this.mediaObj = window.matchMedia(media); + const handler = () => { + this.matchMedia = this.mediaObj.matches; + trigger(this.$el, createEvent("mediachange", false, true, [this.mediaObj])); + }; + this.offMediaObj = on(this.mediaObj, "change", () => { + handler(); + this.$emit("resize"); + }); + handler(); + } + }, + disconnected() { + var _a; + (_a = this.offMediaObj) == null ? void 0 : _a.call(this); + } + }; + function toMedia(value, element) { + if (isString(value)) { + if (startsWith(value, "@")) { + value = toFloat(css(element, `--uk-breakpoint-${value.slice(1)}`)); + } else if (isNaN(value)) { + return value; + } + } + return value && isNumeric(value) ? `(min-width: ${value}px)` : ""; + } + + function getMaxPathLength(el) { + return isVisible(el) ? Math.ceil( + Math.max(0, ...$$("[stroke]", el).map((stroke) => { + var _a; + return ((_a = stroke.getTotalLength) == null ? void 0 : _a.call(stroke)) || 0; + })) + ) : 0; + } + + const props = { + x: transformFn, + y: transformFn, + rotate: transformFn, + scale: transformFn, + color: colorFn, + backgroundColor: colorFn, + borderColor: colorFn, + blur: filterFn, + hue: filterFn, + fopacity: filterFn, + grayscale: filterFn, + invert: filterFn, + saturate: filterFn, + sepia: filterFn, + opacity: cssPropFn, + stroke: strokeFn, + bgx: backgroundFn, + bgy: backgroundFn + }; + const { keys } = Object; + var Parallax = { + mixins: [Media], + props: fillObject(keys(props), "list"), + data: fillObject(keys(props), void 0), + computed: { + props(properties, $el) { + const stops = {}; + for (const prop in properties) { + if (prop in props && !isUndefined(properties[prop])) { + stops[prop] = properties[prop].slice(); + } + } + const result = {}; + for (const prop in stops) { + result[prop] = props[prop](prop, $el, stops[prop], stops); + } + return result; + } + }, + events: { + load() { + this.$emit(); + } + }, + methods: { + reset() { + resetProps(this.$el, this.getCss(0)); + }, + getCss(percent) { + const css2 = {}; + for (const prop in this.props) { + this.props[prop](css2, clamp(percent)); + } + css2.willChange = Object.keys(css2).map(propName).join(","); + return css2; + } + } + }; + function transformFn(prop, el, stops) { + let unit = getUnit(stops) || { x: "px", y: "px", rotate: "deg" }[prop] || ""; + let transformFn2; + if (prop === "x" || prop === "y") { + prop = `translate${ucfirst(prop)}`; + transformFn2 = (stop) => toFloat(toFloat(stop).toFixed(unit === "px" ? 0 : 6)); + } else if (prop === "scale") { + unit = ""; + transformFn2 = (stop) => { + var _a; + return getUnit([stop]) ? toPx(stop, "width", el, true) / el[`offset${((_a = stop.endsWith) == null ? void 0 : _a.call(stop, "vh")) ? "Height" : "Width"}`] : toFloat(stop); + }; + } + if (stops.length === 1) { + stops.unshift(prop === "scale" ? 1 : 0); + } + stops = parseStops(stops, transformFn2); + return (css2, percent) => { + css2.transform = `${css2.transform || ""} ${prop}(${getValue(stops, percent)}${unit})`; + }; + } + function colorFn(prop, el, stops) { + if (stops.length === 1) { + stops.unshift(getCssValue(el, prop, "")); + } + stops = parseStops(stops, (stop) => parseColor(el, stop)); + return (css2, percent) => { + const [start, end, p] = getStop(stops, percent); + const value = start.map((value2, i) => { + value2 += p * (end[i] - value2); + return i === 3 ? toFloat(value2) : parseInt(value2, 10); + }).join(","); + css2[prop] = `rgba(${value})`; + }; + } + function parseColor(el, color) { + return getCssValue(el, "color", color).split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(toFloat); + } + function filterFn(prop, el, stops) { + if (stops.length === 1) { + stops.unshift(0); + } + const unit = getUnit(stops) || { blur: "px", hue: "deg" }[prop] || "%"; + prop = { fopacity: "opacity", hue: "hue-rotate" }[prop] || prop; + stops = parseStops(stops); + return (css2, percent) => { + const value = getValue(stops, percent); + css2.filter = `${css2.filter || ""} ${prop}(${value + unit})`; + }; + } + function cssPropFn(prop, el, stops) { + if (stops.length === 1) { + stops.unshift(getCssValue(el, prop, "")); + } + stops = parseStops(stops); + return (css2, percent) => { + css2[prop] = getValue(stops, percent); + }; + } + function strokeFn(prop, el, stops) { + if (stops.length === 1) { + stops.unshift(0); + } + const unit = getUnit(stops); + const length = getMaxPathLength(el); + stops = parseStops(stops.reverse(), (stop) => { + stop = toFloat(stop); + return unit === "%" ? stop * length / 100 : stop; + }); + if (!stops.some(([value]) => value)) { + return noop; + } + css(el, "strokeDasharray", length); + return (css2, percent) => { + css2.strokeDashoffset = getValue(stops, percent); + }; + } + function backgroundFn(prop, el, stops, props2) { + if (stops.length === 1) { + stops.unshift(0); + } + const attr = prop === "bgy" ? "height" : "width"; + props2[prop] = parseStops(stops, (stop) => toPx(stop, attr, el)); + const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2); + if (bgProps.length === 2 && prop === "bgx") { + return noop; + } + if (getCssValue(el, "backgroundSize", "") === "cover") { + return backgroundCoverFn(prop, el, stops, props2); + } + const positions = {}; + for (const prop2 of bgProps) { + positions[prop2] = getBackgroundPos(el, prop2); + } + return setBackgroundPosFn(bgProps, positions, props2); + } + function backgroundCoverFn(prop, el, stops, props2) { + const dimImage = getBackgroundImageDimensions(el); + if (!dimImage.width) { + return noop; + } + const dimEl = { + width: el.offsetWidth, + height: el.offsetHeight + }; + const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2); + const positions = {}; + for (const prop2 of bgProps) { + const values = props2[prop2].map(([value]) => value); + const min = Math.min(...values); + const max = Math.max(...values); + const down = values.indexOf(min) < values.indexOf(max); + const diff = max - min; + positions[prop2] = `${(down ? -diff : 0) - (down ? min : max)}px`; + dimEl[prop2 === "bgy" ? "height" : "width"] += diff; + } + const dim = Dimensions.cover(dimImage, dimEl); + for (const prop2 of bgProps) { + const attr = prop2 === "bgy" ? "height" : "width"; + const overflow = dim[attr] - dimEl[attr]; + positions[prop2] = `max(${getBackgroundPos(el, prop2)},-${overflow}px) + ${positions[prop2]}`; + } + const fn = setBackgroundPosFn(bgProps, positions, props2); + return (css2, percent) => { + fn(css2, percent); + css2.backgroundSize = `${dim.width}px ${dim.height}px`; + css2.backgroundRepeat = "no-repeat"; + }; + } + function getBackgroundPos(el, prop) { + return getCssValue(el, `background-position-${prop.slice(-1)}`, ""); + } + function setBackgroundPosFn(bgProps, positions, props2) { + return function(css2, percent) { + for (const prop of bgProps) { + const value = getValue(props2[prop], percent); + css2[`background-position-${prop.slice(-1)}`] = `calc(${positions[prop]} + ${value}px)`; + } + }; + } + const loading = {}; + const dimensions = {}; + function getBackgroundImageDimensions(el) { + const src = css(el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1"); + if (dimensions[src]) { + return dimensions[src]; + } + const image = new Image(); + if (src) { + image.src = src; + if (!image.naturalWidth && !loading[src]) { + once(image, "error load", () => { + dimensions[src] = toDimensions(image); + trigger(el, createEvent("load", false)); + }); + loading[src] = true; + return toDimensions(image); + } + } + return dimensions[src] = toDimensions(image); + } + function toDimensions(image) { + return { + width: image.naturalWidth, + height: image.naturalHeight + }; + } + function parseStops(stops, fn = toFloat) { + const result = []; + const { length } = stops; + let nullIndex = 0; + for (let i = 0; i < length; i++) { + let [value, percent] = isString(stops[i]) ? stops[i].trim().split(/ (?![^(]*\))/) : [stops[i]]; + value = fn(value); + percent = percent ? toFloat(percent) / 100 : null; + if (i === 0) { + if (percent === null) { + percent = 0; + } else if (percent) { + result.push([value, 0]); + } + } else if (i === length - 1) { + if (percent === null) { + percent = 1; + } else if (percent !== 1) { + result.push([value, percent]); + percent = 1; + } + } + result.push([value, percent]); + if (percent === null) { + nullIndex++; + } else if (nullIndex) { + const leftPercent = result[i - nullIndex - 1][1]; + const p = (percent - leftPercent) / (nullIndex + 1); + for (let j = nullIndex; j > 0; j--) { + result[i - j][1] = leftPercent + p * (nullIndex - j + 1); + } + nullIndex = 0; + } + } + return result; + } + function getStop(stops, percent) { + const index = findIndex(stops.slice(1), ([, targetPercent]) => percent <= targetPercent) + 1; + return [ + stops[index - 1][0], + stops[index][0], + (percent - stops[index - 1][1]) / (stops[index][1] - stops[index - 1][1]) + ]; + } + function getValue(stops, percent) { + const [start, end, p] = getStop(stops, percent); + return start + Math.abs(start - end) * p * (start < end ? 1 : -1); + } + const unitRe = /^-?\d+(?:\.\d+)?(\S+)?/; + function getUnit(stops, defaultUnit) { + var _a; + for (const stop of stops) { + const match = (_a = stop.match) == null ? void 0 : _a.call(stop, unitRe); + if (match) { + return match[1]; + } + } + return defaultUnit; + } + function getCssValue(el, prop, value) { + const prev = el.style[prop]; + const val = css(css(el, prop, value), prop); + el.style[prop] = prev; + return val; + } + function fillObject(keys2, value) { + return keys2.reduce((data, prop) => { + data[prop] = value; + return data; + }, {}); + } + function ease(percent, easing) { + return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing); + } + + var parallax = { + mixins: [Parallax], + props: { + target: String, + viewport: Number, + // Deprecated + easing: Number, + start: String, + end: String + }, + data: { + target: false, + viewport: 1, + easing: 1, + start: 0, + end: 0 + }, + computed: { + target: ({ target }, $el) => getOffsetElement(target && query(target, $el) || $el), + start({ start }) { + return toPx(start, "height", this.target, true); + }, + end({ end, viewport: viewport2 }) { + return toPx( + end || (viewport2 = (1 - viewport2) * 100) && `${viewport2}vh+${viewport2}%`, + "height", + this.target, + true + ); + } + }, + observe: [ + viewport(), + scroll$1({ target: ({ target }) => target }), + resize({ target: ({ $el, target }) => [$el, target, scrollParent(target, true)] }) + ], + update: { + read({ percent }, types) { + if (!types.has("scroll")) { + percent = false; + } + if (!isVisible(this.$el)) { + return false; + } + if (!this.matchMedia) { + return; + } + const prev = percent; + percent = ease(scrolledOver(this.target, this.start, this.end), this.easing); + return { + percent, + style: prev === percent ? false : this.getCss(percent) + }; + }, + write({ style }) { + if (!this.matchMedia) { + this.reset(); + return; + } + style && css(this.$el, style); + }, + events: ["scroll", "resize"] + } + }; + function getOffsetElement(el) { + return el ? "offsetTop" in el ? el : getOffsetElement(parent(el)) : document.documentElement; + } + + var SliderParallax = { + props: { + parallax: Boolean, + parallaxTarget: Boolean, + parallaxStart: String, + parallaxEnd: String, + parallaxEasing: Number + }, + data: { + parallax: false, + parallaxTarget: false, + parallaxStart: 0, + parallaxEnd: 0, + parallaxEasing: 0 + }, + observe: [ + resize({ + target: ({ $el, parallaxTarget }) => [$el, parallaxTarget], + filter: ({ parallax }) => parallax + }), + scroll$1({ filter: ({ parallax }) => parallax }) + ], + computed: { + parallaxTarget({ parallaxTarget }, $el) { + return parallaxTarget && query(parallaxTarget, $el) || this.list; + } + }, + update: { + read() { + if (!this.parallax) { + return false; + } + const target = this.parallaxTarget; + if (!target) { + return false; + } + const start = toPx(this.parallaxStart, "height", target, true); + const end = toPx(this.parallaxEnd, "height", target, true); + const percent = ease(scrolledOver(target, start, end), this.parallaxEasing); + return { parallax: this.getIndexAt(percent) }; + }, + write({ parallax }) { + const [prevIndex, slidePercent] = parallax; + const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent)); + const prev = this.slides[prevIndex]; + const next = this.slides[nextIndex]; + const { triggerShow, triggerShown, triggerHide, triggerHidden } = useTriggers(this); + if (~this.prevIndex) { + for (const i of /* @__PURE__ */ new Set([this.index, this.prevIndex])) { + if (!includes([nextIndex, prevIndex], i)) { + triggerHide(this.slides[i]); + triggerHidden(this.slides[i]); + } + } + } + const changed = this.prevIndex !== prevIndex || this.index !== nextIndex; + this.dir = 1; + this.prevIndex = prevIndex; + this.index = nextIndex; + if (prev !== next) { + triggerHide(prev); + } + triggerShow(next); + if (changed) { + triggerShown(prev); + } + this._translate(prev === next ? 1 : slidePercent, prev, next); + }, + events: ["scroll", "resize"] + }, + methods: { + getIndexAt(percent) { + const index = percent * (this.length - 1); + return [Math.floor(index), index % 1]; + } + } + }; + function useTriggers(cmp) { + const { clsSlideActive, clsEnter, clsLeave } = cmp; + return { triggerShow, triggerShown, triggerHide, triggerHidden }; + function triggerShow(el) { + if (hasClass(el, clsLeave)) { + triggerHide(el); + triggerHidden(el); + } + if (!hasClass(el, clsSlideActive)) { + trigger(el, "beforeitemshow", [cmp]); + trigger(el, "itemshow", [cmp]); + } + } + function triggerShown(el) { + if (hasClass(el, clsEnter)) { + trigger(el, "itemshown", [cmp]); + } + } + function triggerHide(el) { + if (!hasClass(el, clsSlideActive)) { + triggerShow(el); + } + if (hasClass(el, clsEnter)) { + triggerShown(el); + } + if (!hasClass(el, clsLeave)) { + trigger(el, "beforeitemhide", [cmp]); + trigger(el, "itemhide", [cmp]); + } + } + function triggerHidden(el) { + if (hasClass(el, clsLeave)) { + trigger(el, "itemhidden", [cmp]); + } + } + } + + var SliderReactive = { + update: { + write() { + if (this.stack.length || this.dragging || this.parallax) { + return; + } + const index = this.getValidIndex(); + if (!~this.prevIndex || this.index !== index) { + this.show(index); + } else { + this._translate(1); + } + }, + events: ["resize"] + } + }; + + var SliderPreload = { + observe: lazyload({ + target: ({ slides }) => slides, + targets: (instance) => instance.getAdjacentSlides() + }), + methods: { + getAdjacentSlides() { + return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]); + } + } + }; + + function Transitioner(prev, next, dir, { center, easing, list }) { + const from = prev ? getLeft(prev, list, center) : getLeft(next, list, center) + dimensions$1(next).width * dir; + const to = next ? getLeft(next, list, center) : from + dimensions$1(prev).width * dir * (isRtl ? -1 : 1); + const { promise, resolve } = withResolvers(); + return { + dir, + show(duration, percent = 0, linear) { + const timing = linear ? "linear" : easing; + duration -= Math.round(duration * clamp(percent, -1, 1)); + css(list, "transitionProperty", "none"); + this.translate(percent); + css(list, "transitionProperty", ""); + percent = prev ? percent : clamp(percent, 0, 1); + triggerUpdate(this.getItemIn(), "itemin", { percent, duration, timing, dir }); + prev && triggerUpdate(this.getItemIn(true), "itemout", { + percent: 1 - percent, + duration, + timing, + dir + }); + Transition.start( + list, + { transform: translate(-to * (isRtl ? -1 : 1), "px") }, + duration, + timing + ).then(resolve, noop); + return promise; + }, + cancel() { + return Transition.cancel(list); + }, + reset() { + css(list, "transform", ""); + }, + async forward(duration, percent = this.percent()) { + await this.cancel(); + return this.show(duration, percent, true); + }, + translate(percent) { + if (percent === this.percent()) { + return; + } + const distance = this.getDistance() * dir * (isRtl ? -1 : 1); + css( + list, + "transform", + translate( + clamp( + -to + (distance - distance * percent), + -getWidth(list), + dimensions$1(list).width + ) * (isRtl ? -1 : 1), + "px" + ) + ); + const actives = this.getActives(); + const itemIn = this.getItemIn(); + const itemOut = this.getItemIn(true); + percent = prev ? clamp(percent, -1, 1) : 0; + for (const slide of children(list)) { + const isActive = includes(actives, slide); + const isIn = slide === itemIn; + const isOut = slide === itemOut; + const translateIn = isIn || !isOut && (isActive || dir * (isRtl ? -1 : 1) === -1 ^ getElLeft(slide, list) > getElLeft(prev || next)); + triggerUpdate(slide, `itemtranslate${translateIn ? "in" : "out"}`, { + dir, + percent: isOut ? 1 - percent : isIn ? percent : isActive ? 1 : 0 + }); + } + }, + percent() { + return Math.abs( + (new DOMMatrix(css(list, "transform")).m41 * (isRtl ? -1 : 1) + from) / (to - from) + ); + }, + getDistance() { + return Math.abs(to - from); + }, + getItemIn(out = false) { + let actives = this.getActives(); + let nextActives = inView(list, getLeft(next || prev, list, center)); + if (out) { + const temp = actives; + actives = nextActives; + nextActives = temp; + } + return nextActives[findIndex(nextActives, (el) => !includes(actives, el))]; + }, + getActives() { + return inView(list, getLeft(prev || next, list, center)); + } + }; + } + function getLeft(el, list, center) { + const left = getElLeft(el, list); + return center ? left - centerEl(el, list) : Math.min(left, getMax(list)); + } + function getMax(list) { + return Math.max(0, getWidth(list) - dimensions$1(list).width); + } + function getWidth(list, index) { + return sumBy(children(list).slice(0, index), (el) => dimensions$1(el).width); + } + function centerEl(el, list) { + return dimensions$1(list).width / 2 - dimensions$1(el).width / 2; + } + function getElLeft(el, list) { + return el && (position(el).left + (isRtl ? dimensions$1(el).width - dimensions$1(list).width : 0)) * (isRtl ? -1 : 1) || 0; + } + function inView(list, listLeft) { + listLeft -= 1; + const listWidth = dimensions$1(list).width; + const listRight = listLeft + listWidth + 2; + return children(list).filter((slide) => { + const slideLeft = getElLeft(slide, list); + const slideRight = slideLeft + Math.min(dimensions$1(slide).width, listWidth); + return slideLeft >= listLeft && slideRight <= listRight; + }); + } + + var slider = { + mixins: [Class, Slider, SliderReactive, SliderParallax, SliderPreload], + props: { + center: Boolean, + sets: Boolean, + active: String + }, + data: { + center: false, + sets: false, + attrItem: "uk-slider-item", + selList: ".uk-slider-items", + selNav: ".uk-slider-nav", + clsContainer: "uk-slider-container", + active: "all", + Transitioner + }, + computed: { + finite({ finite }) { + return finite || isFinite(this.list, this.center); + }, + maxIndex() { + if (!this.finite || this.center && !this.sets) { + return this.length - 1; + } + if (this.center) { + return last(this.sets); + } + let lft = 0; + const max = getMax(this.list); + const index = findIndex(this.slides, (el) => { + if (lft >= max - 5e-3) { + return true; + } + lft += dimensions$1(el).width; + }); + return ~index ? index : this.length - 1; + }, + sets({ sets: enabled }) { + if (!enabled || this.parallax) { + return; + } + let left = 0; + const sets = []; + const width = dimensions$1(this.list).width; + for (let i = 0; i < this.length; i++) { + const slideWidth = dimensions$1(this.slides[i]).width; + if (left + slideWidth > width) { + left = 0; + } + if (this.center) { + if (left < width / 2 && left + slideWidth + dimensions$1(this.slides[getIndex(i + 1, this.slides)]).width / 2 > width / 2) { + sets.push(i); + left = width / 2 - slideWidth / 2; + } + } else if (left === 0) { + sets.push(Math.min(i, this.maxIndex)); + } + left += slideWidth; + } + if (sets.length) { + return sets; + } + }, + transitionOptions() { + return { + center: this.center, + list: this.list + }; + }, + slides() { + return children(this.list).filter(isVisible); + } + }, + connected() { + toggleClass(this.$el, this.clsContainer, !$(`.${this.clsContainer}`, this.$el)); + }, + observe: resize({ + target: ({ slides, $el }) => [$el, ...slides] + }), + update: { + write() { + for (const el of this.navItems) { + const index = toNumber(data(el, this.attrItem)); + if (index !== false) { + el.hidden = !this.maxIndex || index > this.maxIndex || this.sets && !includes(this.sets, index); + } + } + this.reorder(); + if (!this.parallax) { + this._translate(1); + } + this.updateActiveClasses(); + }, + events: ["resize"] + }, + events: { + beforeitemshow(e) { + if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) { + this.index = this.getValidIndex(); + } + const diff = Math.abs( + this.index - this.prevIndex + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0) + ); + if (!this.dragging && diff > 1) { + for (let i = 0; i < diff; i++) { + this.stack.splice(1, 0, this.dir > 0 ? "next" : "previous"); + } + e.preventDefault(); + return; + } + const index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex; + const avgWidth = getWidth(this.list) / this.length; + this.duration = speedUp(avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / avgWidth); + this.reorder(); + }, + itemshow() { + if (~this.prevIndex) { + addClass(this._getTransitioner().getItemIn(), this.clsActive); + } + this.updateActiveClasses(this.prevIndex); + }, + itemshown() { + this.updateActiveClasses(); + } + }, + methods: { + reorder() { + if (this.finite) { + css(this.slides, "order", ""); + return; + } + const index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index; + this.slides.forEach( + (slide, i) => css( + slide, + "order", + this.dir > 0 && i < index ? 1 : this.dir < 0 && i >= this.index ? -1 : "" + ) + ); + if (!this.center || !this.length) { + return; + } + const next = this.slides[index]; + let width = dimensions$1(this.list).width / 2 - dimensions$1(next).width / 2; + let j = 0; + while (width > 0) { + const slideIndex = this.getIndex(--j + index, index); + const slide = this.slides[slideIndex]; + css(slide, "order", slideIndex > index ? -2 : -1); + width -= dimensions$1(slide).width; + } + }, + updateActiveClasses(currentIndex = this.index) { + let actives = this._getTransitioner(currentIndex).getActives(); + if (this.active !== "all") { + actives = [this.slides[this.getValidIndex(currentIndex)]]; + } + const activeClasses = [ + this.clsActive, + !this.sets || includes(this.sets, toFloat(this.index)) ? this.clsActivated : "" + ]; + for (const slide of this.slides) { + const active = includes(actives, slide); + toggleClass(slide, activeClasses, active); + slide.ariaHidden = !active; + for (const focusable of $$(selFocusable, slide)) { + if (!hasOwn(focusable, "_tabindex")) { + focusable._tabindex = focusable.tabIndex; + } + focusable.tabIndex = active ? focusable._tabindex : -1; + } + } + }, + getValidIndex(index = this.index, prevIndex = this.prevIndex) { + index = this.getIndex(index, prevIndex); + if (!this.sets) { + return index; + } + let prev; + do { + if (includes(this.sets, index)) { + return index; + } + prev = index; + index = this.getIndex(index + this.dir, prevIndex); + } while (index !== prev); + return index; + }, + getAdjacentSlides() { + const { width } = dimensions$1(this.list); + const left = -width; + const right = width * 2; + const slideWidth = dimensions$1(this.slides[this.index]).width; + const slideLeft = this.center ? width / 2 - slideWidth / 2 : 0; + const slides = /* @__PURE__ */ new Set(); + for (const i of [-1, 1]) { + let currentLeft = slideLeft + (i > 0 ? slideWidth : 0); + let j = 0; + do { + const slide = this.slides[this.getIndex(this.index + i + j++ * i)]; + currentLeft += dimensions$1(slide).width * i; + slides.add(slide); + } while (this.length > j && currentLeft > left && currentLeft < right); + } + return Array.from(slides); + }, + getIndexAt(percent) { + let index = -1; + const scrollDist = this.center ? getWidth(this.list) - (dimensions$1(this.slides[0]).width / 2 + dimensions$1(last(this.slides)).width / 2) : getWidth(this.list, this.maxIndex); + let dist = percent * scrollDist; + let slidePercent = 0; + do { + const slideWidth = dimensions$1(this.slides[++index]).width; + const slideDist = this.center ? slideWidth / 2 + dimensions$1(this.slides[index + 1]).width / 2 : slideWidth; + slidePercent = dist / slideDist % 1; + dist -= slideDist; + } while (dist >= 0 && index < this.maxIndex); + return [index, slidePercent]; + } + } + }; + function isFinite(list, center) { + if (!list || list.length < 2) { + return true; + } + const { width: listWidth } = dimensions$1(list); + if (!center) { + return Math.ceil(getWidth(list)) < Math.trunc(listWidth + getMaxElWidth(list)); + } + const slides = children(list); + const listHalf = Math.trunc(listWidth / 2); + for (const index in slides) { + const slide = slides[index]; + const slideWidth = dimensions$1(slide).width; + const slidesInView = /* @__PURE__ */ new Set([slide]); + let diff = 0; + for (const i of [-1, 1]) { + let left = slideWidth / 2; + let j = 0; + while (left < listHalf) { + const nextSlide = slides[getIndex(+index + i + j++ * i, slides)]; + if (slidesInView.has(nextSlide)) { + return true; + } + left += dimensions$1(nextSlide).width; + slidesInView.add(nextSlide); + } + diff = Math.max( + diff, + slideWidth / 2 + dimensions$1(slides[getIndex(+index + i, slides)]).width / 2 - (left - listHalf) + ); + } + if (Math.trunc(diff) > sumBy( + slides.filter((slide2) => !slidesInView.has(slide2)), + (slide2) => dimensions$1(slide2).width + )) { + return true; + } + } + return false; + } + function getMaxElWidth(list) { + return Math.max(0, ...children(list).map((el) => dimensions$1(el).width)); + } + + var sliderParallax = { + mixins: [Parallax], + beforeConnect() { + this.item = this.$el.closest(`.${this.$options.id.replace("parallax", "items")} > *`); + }, + disconnected() { + this.item = null; + }, + events: [ + { + name: "itemin itemout", + self: true, + el: ({ item }) => item, + handler({ type, detail: { percent, duration, timing, dir } }) { + fastdom.read(() => { + if (!this.matchMedia) { + return; + } + const propsFrom = this.getCss(getCurrentPercent(type, dir, percent)); + const propsTo = this.getCss(isIn(type) ? 0.5 : dir > 0 ? 1 : 0); + fastdom.write(() => { + css(this.$el, propsFrom); + Transition.start(this.$el, propsTo, duration, timing).catch(noop); + }); + }); + } + }, + { + name: "transitioncanceled transitionend", + self: true, + el: ({ item }) => item, + handler() { + Transition.cancel(this.$el); + } + }, + { + name: "itemtranslatein itemtranslateout", + self: true, + el: ({ item }) => item, + handler({ type, detail: { percent, dir } }) { + fastdom.read(() => { + if (!this.matchMedia) { + this.reset(); + return; + } + const props = this.getCss(getCurrentPercent(type, dir, percent)); + fastdom.write(() => css(this.$el, props)); + }); + } + } + ] + }; + function isIn(type) { + return endsWith(type, "in"); + } + function getCurrentPercent(type, dir, percent) { + percent /= 2; + return isIn(type) ^ dir < 0 ? percent : 1 - percent; + } + + var slideshow = { + mixins: [Class, Slideshow, SliderReactive, SliderParallax, SliderPreload], + props: { + ratio: String, + minHeight: String, + maxHeight: String + }, + data: { + ratio: "16:9", + minHeight: void 0, + maxHeight: void 0, + selList: ".uk-slideshow-items", + attrItem: "uk-slideshow-item", + selNav: ".uk-slideshow-nav", + Animations: Animations$1 + }, + watch: { + list(list) { + css(list, { + aspectRatio: this.ratio ? this.ratio.replace(":", "/") : void 0, + minHeight: this.minHeight, + maxHeight: this.maxHeight, + width: "100%" + }); + } + }, + methods: { + getAdjacentSlides() { + return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]); + } + } + }; + + var sortable = { + mixins: [Class, Animate], + props: { + group: String, + threshold: Number, + clsItem: String, + clsPlaceholder: String, + clsDrag: String, + clsDragState: String, + clsBase: String, + clsNoDrag: String, + clsEmpty: String, + clsCustom: String, + handle: String + }, + data: { + group: false, + threshold: 5, + clsItem: "uk-sortable-item", + clsPlaceholder: "uk-sortable-placeholder", + clsDrag: "uk-sortable-drag", + clsDragState: "uk-drag", + clsBase: "uk-sortable", + clsNoDrag: "uk-sortable-nodrag", + clsEmpty: "uk-sortable-empty", + clsCustom: "", + handle: false, + pos: {} + }, + events: { + name: pointerDown$1, + passive: false, + handler(e) { + this.init(e); + } + }, + computed: { + target: (_, $el) => ($el.tBodies || [$el])[0], + items() { + return children(this.target); + }, + isEmpty() { + return !this.items.length; + }, + handles({ handle }, $el) { + return handle ? $$(handle, $el) : this.items; + } + }, + watch: { + isEmpty(empty) { + toggleClass(this.target, this.clsEmpty, empty); + }, + handles(handles, prev) { + const props = { touchAction: "none", userSelect: "none" }; + resetProps(prev, props); + css(handles, props); + } + }, + update: { + write(data) { + if (!this.drag || !parent(this.placeholder)) { + return; + } + const { + pos: { x, y }, + origin: { offsetTop, offsetLeft }, + placeholder + } = this; + css(this.drag, { + top: y - offsetTop, + left: x - offsetLeft + }); + const sortable = this.getSortable(document.elementFromPoint(x, y)); + if (!sortable) { + return; + } + const { items } = sortable; + if (items.some(Transition.inProgress)) { + return; + } + const target = findTarget(items, { x, y }); + if (items.length && (!target || target === placeholder)) { + return; + } + const previous = this.getSortable(placeholder); + const insertTarget = findInsertTarget( + sortable.target, + target, + placeholder, + x, + y, + sortable === previous && data.moved !== target + ); + if (insertTarget === false) { + return; + } + if (insertTarget && placeholder === insertTarget) { + return; + } + if (sortable !== previous) { + previous.remove(placeholder); + data.moved = target; + } else { + delete data.moved; + } + sortable.insert(placeholder, insertTarget); + this.touched.add(sortable); + }, + events: ["move"] + }, + methods: { + init(e) { + const { target, button, defaultPrevented } = e; + const [placeholder] = this.items.filter((el) => el.contains(target)); + if (!placeholder || defaultPrevented || button > 0 || isInput(target) || target.closest(`.${this.clsNoDrag}`) || this.handle && !target.closest(this.handle)) { + return; + } + e.preventDefault(); + this.pos = getEventPos(e); + this.touched = /* @__PURE__ */ new Set([this]); + this.placeholder = placeholder; + this.origin = { target, index: index(placeholder), ...this.pos }; + on(document, pointerMove$1, this.move); + on(document, pointerUp$1, this.end); + if (!this.threshold) { + this.start(e); + } + }, + start(e) { + this.drag = appendDrag(this.$container, this.placeholder); + const { left, top } = dimensions$1(this.placeholder); + assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top }); + addClass(this.drag, this.clsDrag, this.clsCustom); + addClass(this.placeholder, this.clsPlaceholder); + addClass(this.items, this.clsItem); + addClass(document.documentElement, this.clsDragState); + trigger(this.$el, "start", [this, this.placeholder]); + trackScroll(this.pos); + this.move(e); + }, + move: throttle(function(e) { + assign(this.pos, getEventPos(e)); + if (!this.drag && (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold)) { + this.start(e); + } + this.$emit("move"); + }), + end() { + off(document, pointerMove$1, this.move); + off(document, pointerUp$1, this.end); + if (!this.drag) { + return; + } + untrackScroll(); + const sortable = this.getSortable(this.placeholder); + if (this === sortable) { + if (this.origin.index !== index(this.placeholder)) { + trigger(this.$el, "moved", [this, this.placeholder]); + } + } else { + trigger(sortable.$el, "added", [sortable, this.placeholder]); + trigger(this.$el, "removed", [this, this.placeholder]); + } + trigger(this.$el, "stop", [this, this.placeholder]); + remove$1(this.drag); + this.drag = null; + for (const { clsPlaceholder, clsItem } of this.touched) { + for (const sortable2 of this.touched) { + removeClass(sortable2.items, clsPlaceholder, clsItem); + } + } + this.touched = null; + removeClass(document.documentElement, this.clsDragState); + }, + insert(element, target) { + addClass(this.items, this.clsItem); + if (target && target.previousElementSibling !== element) { + this.animate(() => before(target, element)); + } else if (!target && this.target.lastElementChild !== element) { + this.animate(() => append(this.target, element)); + } + }, + remove(element) { + if (this.target.contains(element)) { + this.animate(() => remove$1(element)); + } + }, + getSortable(element) { + do { + const sortable = this.$getComponent(element, "sortable"); + if (sortable && (sortable === this || this.group !== false && sortable.group === this.group)) { + return sortable; + } + } while (element = parent(element)); + } + } + }; + let trackTimer; + function trackScroll(pos) { + let last = Date.now(); + trackTimer = setInterval(() => { + let { x, y } = pos; + y += document.scrollingElement.scrollTop; + const dist = (Date.now() - last) * 0.3; + last = Date.now(); + scrollParents(document.elementFromPoint(x, pos.y)).reverse().some((scrollEl) => { + let { scrollTop: scroll, scrollHeight } = scrollEl; + const { top, bottom, height: height2 } = offsetViewport(scrollEl); + if (top < y && top + 35 > y) { + scroll -= dist; + } else if (bottom > y && bottom - 35 < y) { + scroll += dist; + } else { + return; + } + if (scroll > 0 && scroll < scrollHeight - height2) { + scrollEl.scrollTop = scroll; + return true; + } + }); + }, 15); + } + function untrackScroll() { + clearInterval(trackTimer); + } + function appendDrag(container, element) { + let clone; + if (isTag(element, "li", "tr")) { + clone = $("
        "); + append(clone, element.cloneNode(true).children); + for (const attribute of element.getAttributeNames()) { + attr(clone, attribute, element.getAttribute(attribute)); + } + } else { + clone = element.cloneNode(true); + } + append(container, clone); + css(clone, "margin", "0", "important"); + css(clone, { + boxSizing: "border-box", + width: element.offsetWidth, + height: element.offsetHeight, + padding: css(element, "padding") + }); + height(clone.firstElementChild, height(element.firstElementChild)); + return clone; + } + function findTarget(items, point) { + return items[findIndex(items, (item) => pointInRect(point, dimensions$1(item)))]; + } + function findInsertTarget(list, target, placeholder, x, y, sameList) { + if (!children(list).length) { + return; + } + const rect = dimensions$1(target); + if (!sameList) { + if (!isHorizontal(list, placeholder)) { + return y < rect.top + rect.height / 2 ? target : target.nextElementSibling; + } + return target; + } + const placeholderRect = dimensions$1(placeholder); + const sameRow = linesIntersect( + [rect.top, rect.bottom], + [placeholderRect.top, placeholderRect.bottom] + ); + const [pointerPos, lengthProp, startProp, endProp] = sameRow ? [x, "width", "left", "right"] : [y, "height", "top", "bottom"]; + const diff = placeholderRect[lengthProp] < rect[lengthProp] ? rect[lengthProp] - placeholderRect[lengthProp] : 0; + if (placeholderRect[startProp] < rect[startProp]) { + if (diff && pointerPos < rect[startProp] + diff) { + return false; + } + return target.nextElementSibling; + } + if (diff && pointerPos > rect[endProp] - diff) { + return false; + } + return target; + } + function isHorizontal(list, placeholder) { + const single = children(list).length === 1; + if (single) { + append(list, placeholder); + } + const items = children(list); + const isHorizontal2 = items.some((el, i) => { + const rectA = dimensions$1(el); + return items.slice(i + 1).some((el2) => { + const rectB = dimensions$1(el2); + return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]); + }); + }); + if (single) { + remove$1(placeholder); + } + return isHorizontal2; + } + function linesIntersect(lineA, lineB) { + return lineA[1] > lineB[0] && lineB[1] > lineA[0]; + } + function throttle(fn) { + let throttled; + return function(...args) { + if (!throttled) { + throttled = true; + fn.call(this, ...args); + requestAnimationFrame(() => throttled = false); + } + }; + } + + var tooltip = { + mixins: [Container, Togglable, Position], + data: { + pos: "top", + animation: ["uk-animation-scale-up"], + duration: 100, + cls: "uk-active" + }, + connected() { + makeFocusable(this.$el); + }, + disconnected() { + this.hide(); + }, + methods: { + show() { + if (this.isToggled(this.tooltip || null)) { + return; + } + const { delay = 0, title } = parseProps(this.$options); + if (!title) { + return; + } + const titleAttr = attr(this.$el, "title"); + const off = on(this.$el, ["blur", pointerLeave], (e) => !isTouch(e) && this.hide()); + this.reset = () => { + attr(this.$el, { title: titleAttr, "aria-describedby": null }); + off(); + }; + const id = generateId(this); + attr(this.$el, { title: null, "aria-describedby": id }); + clearTimeout(this.showTimer); + this.showTimer = setTimeout(() => this._show(title, id), delay); + }, + async hide() { + var _a; + if (matches(this.$el, "input:focus")) { + return; + } + clearTimeout(this.showTimer); + if (this.isToggled(this.tooltip || null)) { + await this.toggleElement(this.tooltip, false, false); + } + (_a = this.reset) == null ? void 0 : _a.call(this); + remove$1(this.tooltip); + this.tooltip = null; + }, + async _show(title, id) { + this.tooltip = append( + this.container, + `` + ); + on(this.tooltip, "toggled", (e, toggled) => { + if (!toggled) { + return; + } + const update = () => this.positionAt(this.tooltip, this.$el); + update(); + const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos); + this.origin = this.axis === "y" ? `${flipPosition(dir)}-${align}` : `${align}-${flipPosition(dir)}`; + const handlers = [ + once( + document, + `keydown ${pointerDown$1}`, + this.hide, + false, + (e2) => e2.type === pointerDown$1 && !this.$el.contains(e2.target) || e2.type === "keydown" && e2.keyCode === keyMap.ESC + ), + on([document, ...overflowParents(this.$el)], "scroll", update, { + passive: true + }) + ]; + once(this.tooltip, "hide", () => handlers.forEach((handler) => handler()), { + self: true + }); + }); + if (!await this.toggleElement(this.tooltip, true)) { + this.hide(); + } + } + }, + events: { + // Clicking a button does not give it focus on all browsers and platforms + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus + [`focus ${pointerEnter} ${pointerDown$1}`](e) { + if ((!isTouch(e) || e.type === pointerDown$1) && document.readyState !== "loading") { + this.show(); + } + } + } + }; + function makeFocusable(el) { + if (!isFocusable(el)) { + el.tabIndex = 0; + } + } + function getAlignment(el, target, [dir, align]) { + const elOffset = offset(el); + const targetOffset = offset(target); + const properties = [ + ["left", "right"], + ["top", "bottom"] + ]; + for (const props2 of properties) { + if (elOffset[props2[0]] >= targetOffset[props2[1]]) { + dir = props2[1]; + break; + } + if (elOffset[props2[1]] <= targetOffset[props2[0]]) { + dir = props2[0]; + break; + } + } + const props = includes(properties[0], dir) ? properties[1] : properties[0]; + align = props.find((prop) => elOffset[prop] === targetOffset[prop]) || "center"; + return [dir, align]; + } + function parseProps(options) { + const { el, id, data: data$1 } = options; + return ["delay", "title"].reduce((obj, key) => ({ [key]: data(el, key), ...obj }), { + ...parseOptions(data(el, id), ["title"]), + ...data$1 + }); + } + + var upload = { + mixins: [I18n], + i18n: { + invalidMime: "Invalid File Type: %s", + invalidName: "Invalid File Name: %s", + invalidSize: "Invalid File Size: %s Kilobytes Max" + }, + props: { + allow: String, + clsDragover: String, + concurrent: Number, + maxSize: Number, + method: String, + mime: String, + multiple: Boolean, + name: String, + params: Object, + type: String, + url: String + }, + data: { + allow: false, + clsDragover: "uk-dragover", + concurrent: 1, + maxSize: 0, + method: "POST", + mime: false, + multiple: false, + name: "files[]", + params: {}, + type: "", + url: "", + abort: noop, + beforeAll: noop, + beforeSend: noop, + complete: noop, + completeAll: noop, + error: noop, + fail: noop, + load: noop, + loadEnd: noop, + loadStart: noop, + progress: noop + }, + events: { + change(e) { + if (!matches(e.target, 'input[type="file"]')) { + return; + } + e.preventDefault(); + if (e.target.files) { + this.upload(e.target.files); + } + e.target.value = ""; + }, + drop(e) { + stop(e); + const transfer = e.dataTransfer; + if (!(transfer == null ? void 0 : transfer.files)) { + return; + } + removeClass(this.$el, this.clsDragover); + this.upload(transfer.files); + }, + dragenter(e) { + stop(e); + }, + dragover(e) { + stop(e); + addClass(this.$el, this.clsDragover); + }, + dragleave(e) { + stop(e); + removeClass(this.$el, this.clsDragover); + } + }, + methods: { + async upload(files) { + files = toArray(files); + if (!files.length) { + return; + } + trigger(this.$el, "upload", [files]); + for (const file of files) { + if (this.maxSize && this.maxSize * 1e3 < file.size) { + this.fail(this.t("invalidSize", this.maxSize)); + return; + } + if (this.allow && !match$1(this.allow, file.name)) { + this.fail(this.t("invalidName", this.allow)); + return; + } + if (this.mime && !match$1(this.mime, file.type)) { + this.fail(this.t("invalidMime", this.mime)); + return; + } + } + if (!this.multiple) { + files = files.slice(0, 1); + } + this.beforeAll(this, files); + const chunks = chunk(files, this.concurrent); + const upload = async (files2) => { + const data = new FormData(); + files2.forEach((file) => data.append(this.name, file)); + for (const key in this.params) { + data.append(key, this.params[key]); + } + try { + const xhr = await ajax(this.url, { + data, + method: this.method, + responseType: this.type, + beforeSend: (env) => { + const { xhr: xhr2 } = env; + on(xhr2.upload, "progress", this.progress); + for (const type of ["loadStart", "load", "loadEnd", "abort"]) { + on(xhr2, type.toLowerCase(), this[type]); + } + return this.beforeSend(env); + } + }); + this.complete(xhr); + if (chunks.length) { + await upload(chunks.shift()); + } else { + this.completeAll(xhr); + } + } catch (e) { + this.error(e); + } + }; + await upload(chunks.shift()); + } + } + }; + function match$1(pattern, path) { + return path.match( + new RegExp( + `^${pattern.replace(/\//g, "\\/").replace(/\*\*/g, "(\\/[^\\/]+)*").replace(/\*/g, "[^\\/]+").replace(/((?!\\))\?/g, "$1.")}$`, + "i" + ) + ); + } + function chunk(files, size) { + const chunks = []; + for (let i = 0; i < files.length; i += size) { + chunks.push(files.slice(i, i + size)); + } + return chunks; + } + function stop(e) { + e.preventDefault(); + e.stopPropagation(); + } + async function ajax(url, options) { + const env = { + data: null, + method: "GET", + headers: {}, + xhr: new XMLHttpRequest(), + beforeSend: noop, + responseType: "", + ...options + }; + await env.beforeSend(env); + return send(url, env); + } + function send(url, env) { + return new Promise((resolve, reject) => { + const { xhr } = env; + for (const prop in env) { + if (prop in xhr) { + try { + xhr[prop] = env[prop]; + } catch (e) { + } + } + } + xhr.open(env.method.toUpperCase(), url); + for (const header in env.headers) { + xhr.setRequestHeader(header, env.headers[header]); + } + on(xhr, "load", () => { + if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { + resolve(xhr); + } else { + reject( + assign(Error(xhr.statusText), { + xhr, + status: xhr.status + }) + ); + } + }); + on(xhr, "error", () => reject(assign(Error("Network Error"), { xhr }))); + on(xhr, "timeout", () => reject(assign(Error("Network Timeout"), { xhr }))); + xhr.send(env.data); + }); + } + + var components$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + Countdown: countdown, + Filter: filter, + Lightbox: lightbox, + LightboxPanel: LightboxPanel, + Notification: notification, + Parallax: parallax, + Slider: slider, + SliderParallax: sliderParallax, + Slideshow: slideshow, + SlideshowParallax: sliderParallax, + Sortable: sortable, + Tooltip: tooltip, + Upload: upload + }); + + function boot(App) { + if (inBrowser && window.MutationObserver) { + if (document.body) { + requestAnimationFrame(() => init(App)); + } else { + new MutationObserver((records, observer) => { + if (document.body) { + init(App); + observer.disconnect(); + } + }).observe(document.documentElement, { childList: true }); + } + } + } + function init(App) { + trigger(document, "uikit:init", App); + if (document.body) { + apply(document.body, connect); + } + new MutationObserver(handleMutation).observe(document, { + subtree: true, + childList: true, + attributes: true + }); + App._initialized = true; + } + function handleMutation(records) { + var _a; + for (const { addedNodes, removedNodes, target, attributeName } of records) { + for (const node of addedNodes) { + apply(node, connect); + } + for (const node of removedNodes) { + apply(node, disconnect); + } + const name = attributeName && getComponentName(attributeName); + if (name) { + if (hasAttr(target, attributeName)) { + createComponent(name, target); + } else { + (_a = getComponent(target, name)) == null ? void 0 : _a.$destroy(); + } + } + } + } + function connect(node) { + const components2 = getComponents(node); + for (const name in components2) { + callConnected(components2[name]); + } + for (const attributeName of node.getAttributeNames()) { + const name = getComponentName(attributeName); + name && createComponent(name, node); + } + } + function disconnect(node) { + const components2 = getComponents(node); + for (const name in components2) { + callDisconnected(components2[name]); + } + } + function getComponentName(attribute) { + if (startsWith(attribute, "data-")) { + attribute = attribute.slice(5); + } + const cmp = components$2[attribute]; + return cmp && (cmp.options || cmp).name; + } + + globalApi(App); + instanceApi(App); + + var Accordion = { + mixins: [Class, Togglable], + props: { + animation: Boolean, + targets: String, + active: null, + collapsible: Boolean, + multiple: Boolean, + toggle: String, + content: String, + offset: Number + }, + data: { + targets: "> *", + active: false, + animation: true, + collapsible: true, + multiple: false, + clsOpen: "uk-open", + toggle: "> .uk-accordion-title", + content: "> .uk-accordion-content", + offset: 0 + }, + computed: { + items: ({ targets }, $el) => $$(targets, $el), + toggles({ toggle }) { + return this.items.map((item) => $(toggle, item)); + }, + contents({ content }) { + return this.items.map((item) => { + var _a; + return ((_a = item._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, item); + }); + } + }, + watch: { + items(items, prev) { + if (prev || hasClass(items, this.clsOpen)) { + return; + } + const active = this.active !== false && items[Number(this.active)] || !this.collapsible && items[0]; + if (active) { + this.toggle(active, false); + } + }, + toggles() { + this.$emit(); + }, + contents(items) { + for (const el of items) { + const isOpen = hasClass( + this.items.find((item) => item.contains(el)), + this.clsOpen + ); + hide(el, !isOpen); + } + this.$emit(); + } + }, + observe: lazyload(), + events: [ + { + name: "click keydown", + delegate: ({ targets, $props }) => `${targets} ${$props.toggle}`, + async handler(e) { + var _a; + if (e.type === "keydown" && e.keyCode !== keyMap.SPACE) { + return; + } + maybeDefaultPreventClick(e); + (_a = this._off) == null ? void 0 : _a.call(this); + this._off = keepScrollPosition(e.target); + await this.toggle(index(this.toggles, e.current)); + this._off(); + } + }, + { + name: "shown hidden", + self: true, + delegate: ({ targets }) => targets, + handler() { + this.$emit(); + } + } + ], + update() { + const activeItems = filter$1(this.items, `.${this.clsOpen}`); + for (const index2 in this.items) { + const toggle = this.toggles[index2]; + const content = this.contents[index2]; + if (!toggle || !content) { + continue; + } + toggle.id = generateId(this, toggle); + content.id = generateId(this, content); + const active = includes(activeItems, this.items[index2]); + attr(toggle, { + role: isTag(toggle, "a") ? "button" : null, + "aria-controls": content.id, + "aria-expanded": active, + "aria-disabled": !this.collapsible && activeItems.length < 2 && active + }); + attr(content, { role: "region", "aria-labelledby": toggle.id }); + if (isTag(content, "ul")) { + attr(children(content), "role", "presentation"); + } + } + }, + methods: { + toggle(item, animate) { + item = this.items[getIndex(item, this.items)]; + let items = [item]; + const activeItems = filter$1(this.items, `.${this.clsOpen}`); + if (!this.multiple && !includes(activeItems, items[0])) { + items = items.concat(activeItems); + } + if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) { + return; + } + return Promise.all( + items.map( + (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => { + toggleClass(el2, this.clsOpen, show); + if (animate === false || !this.animation) { + hide($(this.content, el2), !show); + return; + } + return transition(el2, show, this); + }) + ) + ); + } + } + }; + function hide(el, hide2) { + el && (el.hidden = hide2); + } + async function transition(el, show, { content, duration, velocity, transition: transition2 }) { + var _a; + content = ((_a = el._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, el); + if (!el._wrapper) { + el._wrapper = wrapAll(content, "
        "); + } + const wrapper = el._wrapper; + css(wrapper, "overflow", "hidden"); + const currentHeight = toFloat(css(wrapper, "height")); + await Transition.cancel(wrapper); + hide(content, false); + const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions$1(content).height; + const percent = currentHeight / endHeight; + duration = (velocity * endHeight + duration) * (show ? 1 - percent : percent); + css(wrapper, "height", currentHeight); + await Transition.start(wrapper, { height: show ? endHeight : 0 }, duration, transition2); + unwrap(content); + delete el._wrapper; + if (!show) { + hide(content, true); + } + } + function keepScrollPosition(el) { + const scrollElement = scrollParent(el, true); + let frame; + (function scroll() { + frame = requestAnimationFrame(() => { + const { top } = dimensions$1(el); + if (top < 0) { + scrollElement.scrollTop += top; + } + scroll(); + }); + })(); + return () => requestAnimationFrame(() => cancelAnimationFrame(frame)); + } + + var alert = { + mixins: [Class, Togglable], + args: "animation", + props: { + animation: Boolean, + close: String + }, + data: { + animation: true, + selClose: ".uk-alert-close", + duration: 150 + }, + events: { + name: "click", + delegate: ({ selClose }) => selClose, + handler(e) { + maybeDefaultPreventClick(e); + this.close(); + } + }, + methods: { + async close() { + await this.toggleElement(this.$el, false, animate); + this.$destroy(true); + } + } + }; + function animate(el, show, { duration, transition, velocity }) { + const height = toFloat(css(el, "height")); + css(el, "height", height); + return Transition.start( + el, + { + height: 0, + marginTop: 0, + marginBottom: 0, + paddingTop: 0, + paddingBottom: 0, + borderTop: 0, + borderBottom: 0, + opacity: 0 + }, + velocity * height + duration, + transition + ); + } + + var Video = { + args: "autoplay", + props: { + automute: Boolean, + autoplay: Boolean + }, + data: { + automute: false, + autoplay: true + }, + beforeConnect() { + if (this.autoplay === "inview" && !hasAttr(this.$el, "preload")) { + this.$el.preload = "none"; + } + if (isTag(this.$el, "iframe") && !hasAttr(this.$el, "allow")) { + this.$el.allow = "autoplay"; + } + if (this.autoplay === "hover") { + if (isTag(this.$el, "video")) { + this.$el.tabIndex = 0; + } else { + this.autoplay = true; + } + } + if (this.automute) { + mute(this.$el); + } + }, + events: [ + { + name: `${pointerEnter} focusin`, + filter: ({ autoplay }) => includes(autoplay, "hover"), + handler(e) { + if (!isTouch(e) || !isPlaying(this.$el)) { + play(this.$el); + } else { + pause(this.$el); + } + } + }, + { + name: `${pointerLeave} focusout`, + filter: ({ autoplay }) => includes(autoplay, "hover"), + handler(e) { + if (!isTouch(e)) { + pause(this.$el); + } + } + } + ], + observe: [ + intersection({ + filter: ({ autoplay }) => autoplay !== "hover", + handler([{ isIntersecting }]) { + if (!document.fullscreenElement) { + if (isIntersecting) { + if (this.autoplay) { + play(this.$el); + } + } else { + pause(this.$el); + } + } + }, + args: { intersecting: false }, + options: ({ $el, autoplay }) => ({ + root: autoplay === "inview" ? null : parent($el).closest(":not(a)") + }) + }) + ] + }; + function isPlaying(videoEl) { + return !videoEl.paused && !videoEl.ended; + } + + var cover = { + mixins: [Video], + props: { + width: Number, + height: Number + }, + data: { + automute: true + }, + created() { + this.useObjectFit = isTag(this.$el, "img", "video"); + }, + observe: resize({ + target: ({ $el }) => getPositionedParent($el) || parent($el), + filter: ({ useObjectFit }) => !useObjectFit + }), + update: { + read() { + if (this.useObjectFit) { + return false; + } + const { $el, width = $el.clientWidth, height = $el.clientHeight } = this; + const el = getPositionedParent($el) || parent($el); + const dim = Dimensions.cover( + { width, height }, + { width: el.offsetWidth, height: el.offsetHeight } + ); + return dim.width && dim.height ? dim : false; + }, + write({ height, width }) { + css(this.$el, { height, width }); + }, + events: ["resize"] + } + }; + function getPositionedParent(el) { + while (el = parent(el)) { + if (css(el, "position") !== "static") { + return el; + } + } + } + + let active; + var drop = { + mixins: [Container, Position, Togglable], + args: "pos", + props: { + mode: "list", + toggle: Boolean, + boundary: Boolean, + boundaryX: Boolean, + boundaryY: Boolean, + target: Boolean, + targetX: Boolean, + targetY: Boolean, + stretch: Boolean, + delayShow: Number, + delayHide: Number, + autoUpdate: Boolean, + clsDrop: String, + animateOut: Boolean, + bgScroll: Boolean, + closeOnScroll: Boolean + }, + data: { + mode: ["click", "hover"], + toggle: "- *", + boundary: false, + boundaryX: false, + boundaryY: false, + target: false, + targetX: false, + targetY: false, + stretch: false, + delayShow: 0, + delayHide: 800, + autoUpdate: true, + clsDrop: false, + animateOut: false, + bgScroll: true, + animation: ["uk-animation-fade"], + cls: "uk-open", + container: false, + closeOnScroll: false, + selClose: ".uk-drop-close" + }, + computed: { + boundary({ boundary, boundaryX, boundaryY }, $el) { + return [ + query(boundaryX || boundary, $el) || window, + query(boundaryY || boundary, $el) || window + ]; + }, + target({ target, targetX, targetY }, $el) { + targetX || (targetX = target || this.targetEl); + targetY || (targetY = target || this.targetEl); + return [ + targetX === true ? window : query(targetX, $el), + targetY === true ? window : query(targetY, $el) + ]; + } + }, + created() { + this.tracker = new MouseTracker(); + }, + beforeConnect() { + this.clsDrop = this.$props.clsDrop || this.$options.id; + }, + connected() { + addClass(this.$el, "uk-drop", this.clsDrop); + if (this.toggle && !this.targetEl) { + this.targetEl = createToggleComponent(this); + } + attr(this.targetEl, "aria-expanded", false); + this._style = pick(this.$el.style, ["width", "height"]); + }, + disconnected() { + if (this.isActive()) { + this.hide(false); + active = null; + } + css(this.$el, this._style); + }, + events: [ + { + name: "click", + delegate: ({ selClose }) => selClose, + handler(e) { + maybeDefaultPreventClick(e); + this.hide(false); + } + }, + { + name: "click", + delegate: () => 'a[href*="#"]', + handler({ defaultPrevented, current }) { + const { hash } = current; + if (!defaultPrevented && hash && isSameSiteAnchor(current) && !this.$el.contains($(hash))) { + this.hide(false); + } + } + }, + { + name: "beforescroll", + handler() { + this.hide(false); + } + }, + { + name: "toggle", + self: true, + handler(e, toggle) { + e.preventDefault(); + if (this.isToggled()) { + this.hide(false); + } else { + this.show(toggle == null ? void 0 : toggle.$el, false); + } + } + }, + { + name: "toggleshow", + self: true, + handler(e, toggle) { + e.preventDefault(); + this.show(toggle == null ? void 0 : toggle.$el); + } + }, + { + name: "togglehide", + self: true, + handler(e) { + e.preventDefault(); + if (!matches(this.$el, ":focus,:hover")) { + this.hide(); + } + } + }, + { + name: `${pointerEnter} focusin`, + filter: ({ mode }) => includes(mode, "hover"), + handler(e) { + if (!isTouch(e)) { + this.clearTimers(); + } + } + }, + { + name: `${pointerLeave} focusout`, + filter: ({ mode }) => includes(mode, "hover"), + handler(e) { + if (!isTouch(e) && e.relatedTarget) { + this.hide(); + } + } + }, + { + name: "toggled", + self: true, + handler(e, toggled) { + if (toggled) { + this.clearTimers(); + this.position(); + } + } + }, + { + name: "show", + self: true, + handler() { + active = this; + this.tracker.init(); + attr(this.targetEl, "aria-expanded", true); + const handlers = [ + listenForResize(this), + listenForEscClose(this), + listenForBackgroundClose(this), + this.autoUpdate && listenForScroll(this), + this.closeOnScroll && listenForScrollClose(this) + ]; + once(this.$el, "hide", () => handlers.forEach((handler) => handler && handler()), { + self: true + }); + if (!this.bgScroll) { + once(this.$el, "hidden", preventBackgroundScroll(this.$el), { self: true }); + } + } + }, + { + name: "beforehide", + self: true, + handler() { + this.clearTimers(); + } + }, + { + name: "hide", + handler({ target }) { + if (this.$el !== target) { + active = active === null && this.$el.contains(target) && this.isToggled() ? this : active; + return; + } + active = this.isActive() ? null : active; + this.tracker.cancel(); + attr(this.targetEl, "aria-expanded", false); + } + } + ], + update: { + write() { + if (this.isToggled() && !hasClass(this.$el, this.clsEnter)) { + this.position(); + } + } + }, + methods: { + show(target = this.targetEl, delay = true) { + if (this.isToggled() && target && this.targetEl && target !== this.targetEl) { + this.hide(false, false); + } + this.targetEl = target; + this.clearTimers(); + if (this.isActive()) { + return; + } + if (active) { + if (delay && active.isDelaying()) { + this.showTimer = setTimeout(() => matches(target, ":hover") && this.show(), 10); + return; + } + let prev; + while (active && prev !== active && !active.$el.contains(this.$el)) { + prev = active; + active.hide(false, false); + } + } + if (this.container && parent(this.$el) !== this.container) { + append(this.container, this.$el); + } + this.showTimer = setTimeout( + () => this.toggleElement(this.$el, true), + delay && this.delayShow || 0 + ); + }, + hide(delay = true, animate = true) { + const hide = () => this.toggleElement(this.$el, false, this.animateOut && animate); + this.clearTimers(); + this.isDelayedHide = delay; + if (delay && this.isDelaying()) { + this.hideTimer = setTimeout(this.hide, 50); + } else if (delay && this.delayHide) { + this.hideTimer = setTimeout(hide, this.delayHide); + } else { + hide(); + } + }, + clearTimers() { + clearTimeout(this.showTimer); + clearTimeout(this.hideTimer); + this.showTimer = null; + this.hideTimer = null; + }, + isActive() { + return active === this; + }, + isDelaying() { + return [this.$el, ...$$(".uk-drop", this.$el)].some((el) => this.tracker.movesTo(el)); + }, + position() { + const restoreScrollPosition = storeScrollPosition(this.$el); + removeClass(this.$el, "uk-drop-stack"); + css(this.$el, this._style); + this.$el.hidden = true; + const viewports = this.target.map((target) => getViewport$1(this.$el, target)); + const viewportOffset = this.getViewportOffset(this.$el); + const dirs = [ + [0, ["x", "width", "left", "right"]], + [1, ["y", "height", "top", "bottom"]] + ]; + for (const [i, [axis, prop]] of dirs) { + if (this.axis !== axis && includes([axis, true], this.stretch)) { + css(this.$el, { + [prop]: Math.min( + offset(this.boundary[i])[prop], + viewports[i][prop] - 2 * viewportOffset + ), + [`overflow-${axis}`]: "auto" + }); + } + } + const maxWidth = viewports[0].width - 2 * viewportOffset; + this.$el.hidden = false; + css(this.$el, "maxWidth", ""); + if (this.$el.offsetWidth > maxWidth) { + addClass(this.$el, "uk-drop-stack"); + } + css(this.$el, "maxWidth", maxWidth); + this.positionAt(this.$el, this.target, this.boundary); + for (const [i, [axis, prop, start, end]] of dirs) { + if (this.axis === axis && includes([axis, true], this.stretch)) { + const positionOffset = Math.abs(this.getPositionOffset()); + const targetOffset = offset(this.target[i]); + const elOffset = offset(this.$el); + css(this.$el, { + [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max( + offset(this.boundary[i])[start], + viewports[i][start] + viewportOffset + ) : Math.min( + offset(this.boundary[i])[end], + viewports[i][end] - viewportOffset + ) - targetOffset[this.inset ? start : end]) - positionOffset, + [`overflow-${axis}`]: "auto" + }); + this.positionAt(this.$el, this.target, this.boundary); + } + } + restoreScrollPosition(); + } + } + }; + function getViewport$1(el, target) { + return offsetViewport(overflowParents(target).find((parent2) => parent2.contains(el))); + } + function createToggleComponent(drop) { + const { $el } = drop.$create("toggle", query(drop.toggle, drop.$el), { + target: drop.$el, + mode: drop.mode + }); + $el.ariaHasPopup = true; + return $el; + } + function listenForResize(drop) { + const update = () => drop.$emit(); + const off = [ + observeViewportResize(update), + observeResize(overflowParents(drop.$el).concat(drop.target), update) + ]; + return () => off.map((observer) => observer.disconnect()); + } + function listenForScroll(drop, fn = () => drop.$emit()) { + return on([document, ...overflowParents(drop.$el)], "scroll", fn, { + passive: true + }); + } + function listenForEscClose(drop) { + return on(document, "keydown", (e) => { + if (e.keyCode === keyMap.ESC) { + drop.hide(false); + } + }); + } + function listenForScrollClose(drop) { + return listenForScroll(drop, () => drop.hide(false)); + } + function listenForBackgroundClose(drop) { + return on(document, pointerDown$1, ({ target }) => { + if (drop.$el.contains(target)) { + return; + } + once( + document, + `${pointerUp$1} ${pointerCancel} scroll`, + ({ defaultPrevented, type, target: newTarget }) => { + var _a; + if (!defaultPrevented && type === pointerUp$1 && target === newTarget && !((_a = drop.targetEl) == null ? void 0 : _a.contains(target))) { + drop.hide(false); + } + }, + true + ); + }); + } + + var Dropnav = { + mixins: [Class, Container], + props: { + align: String, + clsDrop: String, + boundary: Boolean, + dropbar: Boolean, + dropbarAnchor: Boolean, + duration: Number, + mode: Boolean, + offset: Boolean, + stretch: Boolean, + delayShow: Boolean, + delayHide: Boolean, + target: Boolean, + targetX: Boolean, + targetY: Boolean, + animation: Boolean, + animateOut: Boolean, + closeOnScroll: Boolean + }, + data: { + align: isRtl ? "right" : "left", + clsDrop: "uk-dropdown", + clsDropbar: "uk-dropnav-dropbar", + boundary: true, + dropbar: false, + dropbarAnchor: false, + delayShow: 160, + duration: 200, + container: false, + selNavItem: "> li > a, > ul > li > a" + }, + computed: { + dropbarAnchor: ({ dropbarAnchor }, $el) => query(dropbarAnchor, $el) || $el, + dropbar({ dropbar }) { + if (!dropbar) { + return null; + } + dropbar = this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el); + return dropbar ? dropbar : this._dropbar = $("
        "); + }, + dropContainer(_, $el) { + return this.container || $el; + }, + dropdowns({ clsDrop }, $el) { + var _a; + const dropdowns = $$(`.${clsDrop}`, $el); + if (this.dropContainer !== $el) { + for (const el of $$(`.${clsDrop}`, this.dropContainer)) { + const target = (_a = this.getDropdown(el)) == null ? void 0 : _a.targetEl; + if (!includes(dropdowns, el) && target && this.$el.contains(target)) { + dropdowns.push(el); + } + } + } + return dropdowns; + }, + items({ selNavItem }, $el) { + return $$(selNavItem, $el); + } + }, + watch: { + dropbar(dropbar) { + addClass( + dropbar, + "uk-dropbar", + "uk-dropbar-top", + this.clsDropbar, + `uk-${this.$options.name}-dropbar` + ); + }, + dropdowns() { + this.initializeDropdowns(); + } + }, + connected() { + this.initializeDropdowns(); + preventInitialPointerEnter(this.$el); + }, + disconnected() { + remove$1(this._dropbar); + delete this._dropbar; + }, + events: [ + { + name: "mouseover focusin", + delegate: ({ selNavItem }) => selNavItem, + handler({ current }) { + const active2 = this.getActive(); + if (active2 && includes(active2.mode, "hover") && active2.targetEl && !current.contains(active2.targetEl) && !active2.isDelaying()) { + active2.hide(false); + } + } + }, + { + name: "keydown", + self: true, + delegate: ({ selNavItem }) => selNavItem, + handler(e) { + var _a; + const { current, keyCode } = e; + const active2 = this.getActive(); + if (keyCode === keyMap.DOWN) { + if ((active2 == null ? void 0 : active2.targetEl) === current) { + e.preventDefault(); + (_a = $(selFocusable, active2.$el)) == null ? void 0 : _a.focus(); + } else { + const dropdown = this.dropdowns.find( + (el) => { + var _a2; + return ((_a2 = this.getDropdown(el)) == null ? void 0 : _a2.targetEl) === current; + } + ); + if (dropdown) { + e.preventDefault(); + current.click(); + once(dropdown, "show", (e2) => { + var _a2; + return (_a2 = $(selFocusable, e2.target)) == null ? void 0 : _a2.focus(); + }); + } + } + } + handleNavItemNavigation(e, this.items, active2); + } + }, + { + name: "keydown", + el: ({ dropContainer }) => dropContainer, + delegate: ({ clsDrop }) => `.${clsDrop}`, + handler(e) { + var _a; + const { current, keyCode, target } = e; + if (isInput(target) || !includes(this.dropdowns, current)) { + return; + } + const active2 = this.getActive(); + let next = -1; + if (keyCode === keyMap.HOME) { + next = 0; + } else if (keyCode === keyMap.END) { + next = "last"; + } else if (keyCode === keyMap.UP) { + next = "previous"; + } else if (keyCode === keyMap.DOWN) { + next = "next"; + } else if (keyCode === keyMap.ESC) { + (_a = active2.targetEl) == null ? void 0 : _a.focus(); + } + if (~next) { + e.preventDefault(); + const elements = $$(selFocusable, current); + elements[getIndex( + next, + elements, + findIndex(elements, (el) => matches(el, ":focus")) + )].focus(); + return; + } + handleNavItemNavigation(e, this.items, active2); + } + }, + { + name: "mouseleave", + el: ({ dropbar }) => dropbar, + filter: ({ dropbar }) => dropbar, + handler() { + const active2 = this.getActive(); + if (active2 && includes(active2.mode, "hover") && !this.dropdowns.some((el) => matches(el, ":hover"))) { + active2.hide(); + } + } + }, + { + name: "beforeshow", + el: ({ dropContainer }) => dropContainer, + filter: ({ dropbar }) => dropbar, + handler({ target }) { + if (!this.isDropbarDrop(target)) { + return; + } + if (this.dropbar.previousElementSibling !== this.dropbarAnchor) { + after(this.dropbarAnchor, this.dropbar); + } + addClass(target, `${this.clsDrop}-dropbar`); + } + }, + { + name: "show", + el: ({ dropContainer }) => dropContainer, + filter: ({ dropbar }) => dropbar, + handler({ target }) { + if (!this.isDropbarDrop(target)) { + return; + } + const drop = this.getDropdown(target); + const adjustHeight = () => { + const maxBottom = Math.max( + ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom) + ); + offset(this.dropbar, { + left: offset(this.dropbar).left, + top: this.getDropbarOffset(drop.getPositionOffset()) + }); + this.transitionTo( + maxBottom - offset(this.dropbar).top + toFloat(css(target, "marginBottom")), + target + ); + }; + this._observer = observeResize([drop.$el, ...drop.target], adjustHeight); + adjustHeight(); + } + }, + { + name: "beforehide", + el: ({ dropContainer }) => dropContainer, + filter: ({ dropbar }) => dropbar, + handler(e) { + const active2 = this.getActive(); + if (matches(this.dropbar, ":hover") && active2.$el === e.target && this.isDropbarDrop(active2.$el) && includes(active2.mode, "hover") && active2.isDelayedHide && !this.items.some((el) => active2.targetEl !== el && matches(el, ":focus"))) { + e.preventDefault(); + } + } + }, + { + name: "hide", + el: ({ dropContainer }) => dropContainer, + filter: ({ dropbar }) => dropbar, + handler({ target }) { + var _a; + if (!this.isDropbarDrop(target)) { + return; + } + (_a = this._observer) == null ? void 0 : _a.disconnect(); + const active2 = this.getActive(); + if (!active2 || active2.$el === target) { + this.transitionTo(0); + } + } + } + ], + methods: { + getActive() { + var _a; + return includes(this.dropdowns, (_a = active) == null ? void 0 : _a.$el) && active; + }, + async transitionTo(newHeight, el) { + const { dropbar } = this; + const oldHeight = height(dropbar); + el = oldHeight < newHeight && el; + await Transition.cancel([el, dropbar]); + if (el) { + const diff = offset(el).top - offset(dropbar).top - oldHeight; + if (diff > 0) { + css(el, "transitionDelay", `${diff / newHeight * this.duration}ms`); + } + } + css(el, "clipPath", `polygon(0 0,100% 0,100% ${oldHeight}px,0 ${oldHeight}px)`); + height(dropbar, oldHeight); + await Promise.all([ + Transition.start(dropbar, { height: newHeight }, this.duration), + Transition.start( + el, + { clipPath: `polygon(0 0,100% 0,100% ${newHeight}px,0 ${newHeight}px)` }, + this.duration + ).finally(() => css(el, { clipPath: "", transitionDelay: "" })) + ]).catch(noop); + }, + getDropdown(el) { + return this.$getComponent(el, "drop") || this.$getComponent(el, "dropdown"); + }, + isDropbarDrop(el) { + return includes(this.dropdowns, el) && hasClass(el, this.clsDrop); + }, + getDropbarOffset(offsetTop) { + const { $el, target, targetY } = this; + const { top, height: height2 } = offset(query(targetY || target || $el, $el)); + return top + height2 + offsetTop; + }, + initializeDropdowns() { + this.$create( + "drop", + this.dropdowns.filter((el) => !this.getDropdown(el)), + { + ...this.$props, + flip: false, + shift: true, + pos: `bottom-${this.align}`, + boundary: this.boundary === true ? this.$el : this.boundary + } + ); + } + } + }; + function handleNavItemNavigation(e, toggles, active2) { + var _a, _b, _c; + const { current, keyCode } = e; + let next = -1; + if (keyCode === keyMap.HOME) { + next = 0; + } else if (keyCode === keyMap.END) { + next = "last"; + } else if (keyCode === keyMap.LEFT) { + next = "previous"; + } else if (keyCode === keyMap.RIGHT) { + next = "next"; + } else if (keyCode === keyMap.TAB) { + (_a = active2.targetEl) == null ? void 0 : _a.focus(); + (_b = active2.hide) == null ? void 0 : _b.call(active2, false); + } + if (~next) { + e.preventDefault(); + (_c = active2.hide) == null ? void 0 : _c.call(active2, false); + toggles[getIndex(next, toggles, toggles.indexOf(active2.targetEl || current))].focus(); + } + } + function preventInitialPointerEnter(el) { + const off = () => handlers.forEach((handler) => handler()); + const handlers = [ + once(el.ownerDocument, pointerMove$1, (e) => el.contains(e.target) || off()), + on(el, `mouseenter ${pointerEnter}`, (e) => e.stopPropagation(), { capture: true }), + on(el, `mouseleave ${pointerLeave}`, off, { capture: true }) + ]; + } + + var formCustom = { + mixins: [Class], + args: "target", + props: { + target: Boolean + }, + data: { + target: false + }, + computed: { + input: (_, $el) => $(selInput, $el), + state() { + return this.input.nextElementSibling; + }, + target({ target }, $el) { + return target && (target === true && parent(this.input) === $el && this.input.nextElementSibling || $(target, $el)); + } + }, + update() { + var _a; + const { target, input } = this; + if (!target) { + return; + } + let option; + const prop = isInput(target) ? "value" : "textContent"; + const prev = target[prop]; + const value = ((_a = input.files) == null ? void 0 : _a[0]) ? input.files[0].name : matches(input, "select") && (option = $$("option", input).filter((el) => el.selected)[0]) ? option.textContent : input.value; + if (prev !== value) { + target[prop] = value; + } + }, + events: [ + { + name: "change", + handler() { + this.$emit(); + } + }, + { + name: "reset", + el: ({ $el }) => $el.closest("form"), + handler() { + this.$emit(); + } + } + ] + }; + + var grid = { + extends: Margin, + mixins: [Class], + name: "grid", + props: { + masonry: Boolean, + parallax: String, + parallaxStart: String, + parallaxEnd: String, + parallaxJustify: Boolean + }, + data: { + margin: "uk-grid-margin", + clsStack: "uk-grid-stack", + masonry: false, + parallax: 0, + parallaxStart: 0, + parallaxEnd: 0, + parallaxJustify: false + }, + connected() { + this.masonry && addClass(this.$el, "uk-flex-top", "uk-flex-wrap-top"); + }, + observe: scroll$1({ filter: ({ parallax, parallaxJustify }) => parallax || parallaxJustify }), + update: [ + { + write({ rows }) { + toggleClass(this.$el, this.clsStack, !rows.some((row) => row.length > 1)); + }, + events: ["resize"] + }, + { + read(data) { + const { rows } = data; + let { masonry, parallax, parallaxJustify, margin } = this; + parallax = Math.max(0, toPx(parallax)); + if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some( + (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth) + )) { + return data.translates = data.scrollColumns = false; + } + let gutter = getGutter(rows, margin); + let columns; + let translates; + if (masonry) { + [columns, translates] = applyMasonry(rows, gutter, masonry === "next"); + } else { + columns = transpose(rows); + } + const columnHeights = columns.map( + (column) => sumBy(column, "offsetHeight") + gutter * (column.length - 1) + ); + const height = Math.max(0, ...columnHeights); + let scrollColumns; + let parallaxStart; + let parallaxEnd; + if (parallax || parallaxJustify) { + scrollColumns = columnHeights.map( + (hgt, i) => parallaxJustify ? height - hgt + parallax : parallax / (i % 2 || 8) + ); + if (!parallaxJustify) { + parallax = Math.max( + ...columnHeights.map((hgt, i) => hgt + scrollColumns[i] - height) + ); + } + parallaxStart = toPx(this.parallaxStart, "height", this.$el, true); + parallaxEnd = toPx(this.parallaxEnd, "height", this.$el, true); + } + return { + columns, + translates, + scrollColumns, + parallaxStart, + parallaxEnd, + padding: parallax, + height: translates ? height : "" + }; + }, + write({ height, padding }) { + css(this.$el, "paddingBottom", padding || ""); + height !== false && css(this.$el, "height", height); + }, + events: ["resize"] + }, + { + read({ rows, scrollColumns, parallaxStart, parallaxEnd }) { + return { + scrolled: scrollColumns && !positionedAbsolute(rows) ? scrolledOver(this.$el, parallaxStart, parallaxEnd) : false + }; + }, + write({ columns, scrolled, scrollColumns, translates }) { + if (!scrolled && !translates) { + return; + } + columns.forEach( + (column, i) => column.forEach((el, j) => { + let [x, y] = translates && translates[i][j] || [0, 0]; + if (scrolled) { + y += scrolled * scrollColumns[i]; + } + css(el, "transform", `translate(${x}px, ${y}px)`); + }) + ); + }, + events: ["scroll", "resize"] + } + ] + }; + function positionedAbsolute(rows) { + return rows.flat().some((el) => css(el, "position") === "absolute"); + } + function applyMasonry(rows, gutter, next) { + const columns = []; + const translates = []; + const columnHeights = Array(rows[0].length).fill(0); + let rowHeights = 0; + for (let row of rows) { + if (isRtl) { + row.reverse(); + } + let height = 0; + for (const j in row) { + const { offsetWidth, offsetHeight } = row[j]; + const index = next ? j : columnHeights.indexOf(Math.min(...columnHeights)); + push(columns, index, row[j]); + push(translates, index, [ + (index - j) * offsetWidth * (isRtl ? -1 : 1), + columnHeights[index] - rowHeights + ]); + columnHeights[index] += offsetHeight + gutter; + height = Math.max(height, offsetHeight); + } + rowHeights += height + gutter; + } + return [columns, translates]; + } + function getGutter(rows, cls) { + const node = rows.flat().find((el) => hasClass(el, cls)); + return toFloat(node ? css(node, "marginTop") : css(rows[0][0], "paddingLeft")); + } + function transpose(rows) { + const columns = []; + for (const row of rows) { + for (const i in row) { + push(columns, i, row[i]); + } + } + return columns; + } + function push(array, index, value) { + if (!array[index]) { + array[index] = []; + } + array[index].push(value); + } + + var heightMatch = { + args: "target", + props: { + target: String, + row: Boolean + }, + data: { + target: "> *", + row: true + }, + computed: { + elements: ({ target }, $el) => $$(target, $el) + }, + observe: resize({ + target: ({ $el, elements }) => elements.reduce((elements2, el) => elements2.concat(el, ...el.children), [$el]) + }), + events: { + // Hidden elements may change height when fonts load + name: "loadingdone", + el: () => document.fonts, + handler() { + this.$emit("resize"); + } + }, + update: { + read() { + return { + rows: (this.row ? getRows(this.elements) : [this.elements]).map(match) + }; + }, + write({ rows }) { + for (const { heights, elements } of rows) { + elements.forEach((el, i) => css(el, "minHeight", heights[i])); + } + }, + events: ["resize"] + } + }; + function match(elements) { + if (elements.length < 2) { + return { heights: [""], elements }; + } + let heights = elements.map(getHeight); + const max = Math.max(...heights); + return { + heights: elements.map((el, i) => heights[i].toFixed(2) === max.toFixed(2) ? "" : max), + elements + }; + } + function getHeight(element) { + const style = pick(element.style, ["display", "minHeight"]); + if (!isVisible(element)) { + css(element, "display", "block", "important"); + } + css(element, "minHeight", ""); + const height = dimensions$1(element).height - boxModelAdjust(element, "height", "content-box"); + css(element, style); + return height; + } + + var heightPlaceholder = { + args: "target", + props: { + target: String + }, + data: { + target: "" + }, + computed: { + target: { + get: ({ target }, $el) => query(target, $el), + observe: ({ target }) => target + } + }, + observe: resize({ target: ({ target }) => target }), + update: { + read() { + return this.target ? { height: this.target.offsetHeight } : false; + }, + write({ height }) { + css(this.$el, "minHeight", height); + }, + events: ["resize"] + } + }; + + var heightViewport = { + props: { + expand: Boolean, + offsetTop: Boolean, + offsetBottom: Boolean, + min: Number, + property: String + }, + data: { + expand: false, + offsetTop: false, + offsetBottom: false, + min: 0, + property: "min-height" + }, + // check for offsetTop change + observe: [ + viewport({ filter: ({ expand }) => expand }), + resize({ target: ({ $el }) => scrollParents($el) }) + ], + update: { + read() { + if (!isVisible(this.$el)) { + return false; + } + let minHeight = ""; + const box = boxModelAdjust(this.$el, "height", "content-box"); + const { body, scrollingElement } = document; + const scrollElement = scrollParent(this.$el); + const { height: viewportHeight } = offsetViewport( + scrollElement === body ? scrollingElement : scrollElement + ); + const isScrollingElement = scrollingElement === scrollElement || body === scrollElement; + minHeight = `calc(${isScrollingElement ? "100vh" : `${viewportHeight}px`}`; + if (this.expand) { + const diff = dimensions$1(scrollElement).height - dimensions$1(this.$el).height; + minHeight += ` - ${diff}px`; + } else { + if (this.offsetTop) { + if (isScrollingElement) { + const offsetTopEl = this.offsetTop === true ? this.$el : query(this.offsetTop, this.$el); + const { top } = offset(offsetTopEl); + minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : ""; + } else { + minHeight += ` - ${boxModelAdjust(scrollElement, "height", css(scrollElement, "boxSizing"))}px`; + } + } + if (this.offsetBottom === true) { + minHeight += ` - ${dimensions$1(this.$el.nextElementSibling).height}px`; + } else if (isNumeric(this.offsetBottom)) { + minHeight += ` - ${this.offsetBottom}vh`; + } else if (this.offsetBottom && endsWith(this.offsetBottom, "px")) { + minHeight += ` - ${toFloat(this.offsetBottom)}px`; + } else if (isString(this.offsetBottom)) { + minHeight += ` - ${dimensions$1(query(this.offsetBottom, this.$el)).height}px`; + } + } + minHeight += `${box ? ` - ${box}px` : ""})`; + return { minHeight }; + }, + write({ minHeight }) { + css(this.$el, this.property, `max(${this.min || 0}px, ${minHeight})`); + }, + events: ["resize"] + } + }; + + var closeIcon = ""; + + var closeLarge = ""; + + var dropParentIcon = ""; + + var marker = ""; + + var navParentIconLarge = ""; + + var navParentIcon = ""; + + var navbarParentIcon = ""; + + var navbarToggleIcon = ""; + + var overlayIcon = ""; + + var paginationNext = ""; + + var paginationPrevious = ""; + + var searchIcon = ""; + + var searchLarge = ""; + + var searchMedium = ""; + + var slidenavNextLarge = ""; + + var slidenavNext = ""; + + var slidenavPreviousLarge = ""; + + var slidenavPrevious = ""; + + var spinner = ""; + + var totop = ""; + + var Svg = { + args: "src", + props: { + width: Number, + height: Number, + ratio: Number + }, + data: { + ratio: 1 + }, + connected() { + this.svg = this.getSvg().then((el) => { + if (!this._connected) { + return; + } + const svg = insertSVG(el, this.$el); + if (this.svgEl && svg !== this.svgEl) { + remove$1(this.svgEl); + } + applyWidthAndHeight.call(this, svg, el); + return this.svgEl = svg; + }, noop); + }, + disconnected() { + this.svg.then((svg) => { + if (this._connected) { + return; + } + if (isVoidElement(this.$el)) { + this.$el.hidden = false; + } + remove$1(svg); + this.svgEl = null; + }); + this.svg = null; + }, + methods: { + async getSvg() { + } + } + }; + function insertSVG(el, root) { + if (isVoidElement(root) || isTag(root, "canvas")) { + root.hidden = true; + const next = root.nextElementSibling; + return equals(el, next) ? next : after(root, el); + } + const last = root.lastElementChild; + return equals(el, last) ? last : append(root, el); + } + function equals(el, other) { + return isTag(el, "svg") && isTag(other, "svg") && el.innerHTML === other.innerHTML; + } + function applyWidthAndHeight(el, ref) { + const props = ["width", "height"]; + let dimensions = props.map((prop) => this[prop]); + if (!dimensions.some((val) => val)) { + dimensions = props.map((prop) => attr(ref, prop)); + } + const viewBox = attr(ref, "viewBox"); + if (viewBox && !dimensions.some((val) => val)) { + dimensions = viewBox.split(" ").slice(2); + } + dimensions.forEach((val, i) => attr(el, props[i], toFloat(val) * this.ratio || null)); + } + function parseSVG(svg, icon) { + if (icon && includes(svg, "/g; + const parseSymbols = memoize(function(svg) { + const symbols = {}; + let match; + while (match = symbolRe.exec(svg)) { + symbols[match[3]] = ``; + } + return symbols; + }); + + const icons = { + spinner, + totop, + marker, + "close-icon": closeIcon, + "close-large": closeLarge, + "drop-parent-icon": dropParentIcon, + "nav-parent-icon": navParentIcon, + "nav-parent-icon-large": navParentIconLarge, + "navbar-parent-icon": navbarParentIcon, + "navbar-toggle-icon": navbarToggleIcon, + "overlay-icon": overlayIcon, + "pagination-next": paginationNext, + "pagination-previous": paginationPrevious, + "search-icon": searchIcon, + "search-medium": searchMedium, + "search-large": searchLarge, + "search-toggle-icon": searchIcon, + "slidenav-next": slidenavNext, + "slidenav-next-large": slidenavNextLarge, + "slidenav-previous": slidenavPrevious, + "slidenav-previous-large": slidenavPreviousLarge + }; + const Icon = { + install: install$1, + mixins: [Svg], + args: "icon", + props: { icon: String }, + isIcon: true, + beforeConnect() { + addClass(this.$el, "uk-icon"); + }, + async connected() { + const svg = await this.svg; + if (svg) { + svg.ariaHidden = true; + } + }, + methods: { + async getSvg() { + const icon = getIcon(this.icon); + if (!icon) { + throw "Icon not found."; + } + return icon; + } + } + }; + const IconComponent = { + args: false, + extends: Icon, + data: (vm) => ({ + icon: hyphenate(vm.constructor.options.name) + }), + beforeConnect() { + addClass(this.$el, this.$options.id); + } + }; + const NavParentIcon = { + extends: IconComponent, + beforeConnect() { + const icon = this.$props.icon; + this.icon = this.$el.closest(".uk-nav-primary") ? `${icon}-large` : icon; + } + }; + const Search = { + extends: IconComponent, + mixins: [I18n], + i18n: { toggle: "Open Search", submit: "Submit Search" }, + beforeConnect() { + const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle"); + this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && this.$el.closest(".uk-search-large") ? "search-large" : this.$el.closest(".uk-search-medium") ? "search-medium" : this.$props.icon; + if (hasAttr(this.$el, "aria-label")) { + return; + } + if (isToggle) { + this.$el.ariaLabel = this.t("toggle"); + } else { + const button = this.$el.closest("a,button"); + if (button) { + button.ariaLabel = this.t("submit"); + } + } + } + }; + const Spinner = { + extends: IconComponent, + beforeConnect() { + this.$el.role = "status"; + }, + methods: { + async getSvg() { + const icon = await Icon.methods.getSvg.call(this); + if (this.ratio !== 1) { + css($("circle", icon), "strokeWidth", 1 / this.ratio); + } + return icon; + } + } + }; + const ButtonComponent = { + extends: IconComponent, + mixins: [I18n], + beforeConnect() { + const button = this.$el.closest("a,button"); + attr(button, "role", this.role !== null && isTag(button, "a") ? "button" : this.role); + const label = this.t("label"); + if (label && !hasAttr(button, "aria-label")) { + attr(button, "aria-label", label); + } + } + }; + const Slidenav = { + extends: ButtonComponent, + beforeConnect() { + addClass(this.$el, "uk-slidenav"); + const icon = this.$props.icon; + this.icon = hasClass(this.$el, "uk-slidenav-large") ? `${icon}-large` : icon; + } + }; + const NavbarToggleIcon = { + extends: ButtonComponent, + i18n: { label: "Open menu" }, + beforeConnect() { + const button = this.$el.closest("a,button"); + if (button) { + button.ariaExpanded = false; + } + } + }; + const Close = { + extends: ButtonComponent, + i18n: { label: "Close" }, + beforeConnect() { + this.icon = `close-${hasClass(this.$el, "uk-close-large") ? "large" : "icon"}`; + } + }; + const Marker = { + extends: ButtonComponent, + i18n: { label: "Open" } + }; + const Totop = { + extends: ButtonComponent, + i18n: { label: "Back to top" } + }; + const PaginationNext = { + extends: ButtonComponent, + i18n: { label: "Next page" }, + data: { role: null } + }; + const PaginationPrevious = { + extends: ButtonComponent, + i18n: { label: "Previous page" }, + data: { role: null } + }; + const parsed = {}; + function install$1(UIkit) { + UIkit.icon.add = (name, svg) => { + const added = isString(name) ? { [name]: svg } : name; + each(added, (svg2, name2) => { + icons[name2] = svg2; + delete parsed[name2]; + }); + if (UIkit._initialized) { + apply( + document.body, + (el) => each(UIkit.getComponents(el), (cmp) => { + cmp.$options.isIcon && cmp.icon in added && cmp.$reset(); + }) + ); + } + }; + } + const aliases = { twitter: "x" }; + function getIcon(icon) { + icon = aliases[icon] || icon; + if (!icons[icon]) { + return null; + } + if (!parsed[icon]) { + parsed[icon] = parseSVG(icons[applyRtl(icon)] || icons[icon]); + } + return parsed[icon].cloneNode(true); + } + function applyRtl(icon) { + return isRtl ? swap(swap(icon, "left", "right"), "previous", "next") : icon; + } + + var inverse = { + props: { + target: String, + selActive: String + }, + data: { + target: false, + selActive: false + }, + connected() { + this.isIntersecting = 0; + }, + computed: { + target: ({ target }, $el) => target ? $$(target, $el) : $el + }, + watch: { + target: { + handler() { + queueMicrotask(() => this.$reset()); + }, + immediate: false + } + }, + observe: [ + intersection({ + handler(entries) { + this.isIntersecting = entries.reduce( + (sum, { isIntersecting }) => sum + (isIntersecting ? 1 : this.isIntersecting ? -1 : 0), + this.isIntersecting + ); + this.$emit(); + }, + target: ({ target }) => target, + args: { intersecting: false } + }), + mutation({ + target: ({ target }) => target, + options: { attributes: true, attributeFilter: ["class"] } + }), + { + target: ({ target }) => target, + observe: (target, handler) => { + const observer = observeResize( + [...toNodes(target), document.documentElement], + handler + ); + const listener = [ + on(document, "scroll itemshown itemhidden", handler, { + passive: true, + capture: true + }), + on(document, "show hide transitionstart", (e) => { + handler(); + return observer.observe(e.target); + }), + on(document, "shown hidden transitionend transitioncancel", (e) => { + handler(); + return observer.unobserve(e.target); + }) + ]; + return { + observe: observer.observe.bind(observer), + unobserve: observer.unobserve.bind(observer), + disconnect() { + observer.disconnect(); + listener.map((off) => off()); + } + }; + }, + handler() { + this.$emit(); + } + } + ], + update: { + read() { + if (!this.isIntersecting) { + return false; + } + for (const target of toNodes(this.target)) { + let color = !this.selActive || matches(target, this.selActive) ? findTargetColor(target) : ""; + if (color !== false) { + replaceClass(target, "uk-light uk-dark", color); + } + } + } + } + }; + function findTargetColor(target) { + const dim = dimensions$1(target); + const viewport = dimensions$1(window); + if (!intersectRect(dim, viewport)) { + return false; + } + const { left, top, height, width } = dim; + let last; + for (const percent of [0.25, 0.5, 0.75]) { + const elements = target.ownerDocument.elementsFromPoint( + Math.max(0, Math.min(left + width * percent, viewport.width - 1)), + Math.max(0, Math.min(top + height / 2, viewport.height - 1)) + ); + for (const element of elements) { + if (target.contains(element) || !checkVisibility(element) || element.closest('[class*="-leave"]') && elements.some((el) => element !== el && matches(el, '[class*="-enter"]'))) { + continue; + } + const color = css(element, "--uk-inverse"); + if (color) { + if (color === last) { + return `uk-${color}`; + } + last = color; + break; + } + } + } + return last ? `uk-${last}` : ""; + } + function checkVisibility(element) { + if (css(element, "visibility") !== "visible") { + return false; + } + while (element) { + if (css(element, "opacity") === "0") { + return false; + } + element = parent(element); + } + return true; + } + + var leader = { + mixins: [Class, Media], + props: { + fill: String + }, + data: { + fill: "", + clsWrapper: "uk-leader-fill", + clsHide: "uk-leader-hide", + attrFill: "data-fill" + }, + computed: { + fill: ({ fill }, $el) => fill || css($el, "--uk-leader-fill-content") + }, + connected() { + [this.wrapper] = wrapInner(this.$el, ``); + }, + disconnected() { + unwrap(this.wrapper.childNodes); + }, + observe: resize(), + update: { + read() { + const width = Math.trunc(this.$el.offsetWidth / 2); + return { + width, + fill: this.fill, + hide: !this.matchMedia + }; + }, + write({ width, fill, hide }) { + toggleClass(this.wrapper, this.clsHide, hide); + attr(this.wrapper, this.attrFill, new Array(width).join(fill)); + }, + events: ["resize"] + } + }; + + var modal = { + install, + mixins: [Modal], + data: { + clsPage: "uk-modal-page", + selPanel: ".uk-modal-dialog", + selClose: '[class*="uk-modal-close"]' + }, + events: [ + { + name: "fullscreenchange webkitendfullscreen", + capture: true, + handler(e) { + if (isTag(e.target, "video") && this.isToggled() && !document.fullscreenElement) { + this.hide(); + } + } + }, + { + name: "show", + self: true, + handler() { + if (hasClass(this.panel, "uk-margin-auto-vertical")) { + addClass(this.$el, "uk-flex"); + } else { + css(this.$el, "display", "block"); + } + height(this.$el); + } + }, + { + name: "hidden", + self: true, + handler() { + css(this.$el, "display", ""); + removeClass(this.$el, "uk-flex"); + } + } + ] + }; + function install({ modal }) { + modal.dialog = function(content, options) { + const dialog = modal($(`
        ${content}
        `), { + stack: true, + role: "alertdialog", + ...options + }); + dialog.show(); + on( + dialog.$el, + "hidden", + async () => { + await Promise.resolve(); + dialog.$destroy(true); + }, + { self: true } + ); + return dialog; + }; + modal.alert = function(message, options) { + return openDialog( + ({ i18n }) => `
        ${isString(message) ? message : html(message)}
        `, + options + ); + }; + modal.confirm = function(message, options) { + return openDialog( + ({ i18n }) => `
        ${isString(message) ? message : html(message)}
        `, + options, + () => Promise.reject() + ); + }; + modal.prompt = function(message, value, options) { + const promise = openDialog( + ({ i18n }) => `
        `, + options, + () => null, + () => input.value + ); + const { $el } = promise.dialog; + const input = $("input", $el); + input.value = value || ""; + on($el, "show", () => input.select()); + return promise; + }; + modal.i18n = { + ok: "Ok", + cancel: "Cancel" + }; + function openDialog(tmpl, options, hideFn = noop, submitFn = noop) { + options = { + bgClose: false, + escClose: true, + ...options, + i18n: { ...modal.i18n, ...options == null ? void 0 : options.i18n } + }; + const dialog = modal.dialog(tmpl(options), options); + return assign( + new Promise((resolve) => { + const off = on(dialog.$el, "hide", () => resolve(hideFn())); + on(dialog.$el, "submit", "form", (e) => { + e.preventDefault(); + resolve(submitFn(dialog)); + off(); + dialog.hide(); + }); + }), + { dialog } + ); + } + } + + var nav = { + extends: Accordion, + data: { + targets: "> .uk-parent", + toggle: "> a", + content: "> ul" + } + }; + + const clsNavbarTransparent = "uk-navbar-transparent"; + var navbar = { + extends: Dropnav, + props: { + dropbarTransparentMode: Boolean + }, + data: { + delayShow: 200, + clsDrop: "uk-navbar-dropdown", + selNavItem: ".uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle", + // Simplify with :where() selector once browser target is Safari 14+ + dropbarTransparentMode: false + }, + computed: { + navbarContainer: (_, $el) => $el.closest(".uk-navbar-container") + }, + watch: { + items() { + const justify = hasClass(this.$el, "uk-navbar-justify"); + const containers = $$(".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right", this.$el); + for (const container of containers) { + const items = justify ? $$(".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle", container).length : ""; + css(container, "flexGrow", items); + } + } + }, + events: [ + { + name: "show", + el: ({ dropContainer }) => dropContainer, + handler({ target }) { + if (this.getTransparentMode(target) === "remove" && hasClass(this.navbarContainer, clsNavbarTransparent)) { + removeClass(this.navbarContainer, clsNavbarTransparent); + this._transparent = true; + } + } + }, + { + name: "hide", + el: ({ dropContainer }) => dropContainer, + async handler() { + await awaitMacroTask(); + if (this._transparent && (!active || !this.dropContainer.contains(active.$el))) { + addClass(this.navbarContainer, clsNavbarTransparent); + this._transparent = null; + } + } + } + ], + methods: { + getTransparentMode(el) { + if (!this.navbarContainer) { + return; + } + if (this.dropbar && this.isDropbarDrop(el)) { + return this.dropbarTransparentMode; + } + const drop = this.getDropdown(el); + if (drop && hasClass(el, "uk-dropbar")) { + return drop.inset ? "behind" : "remove"; + } + }, + getDropbarOffset(offsetTop) { + const { top, height } = offset(this.navbarContainer); + return top + (this.dropbarTransparentMode === "behind" ? 0 : height + offsetTop); + } + } + }; + function awaitMacroTask() { + return new Promise((resolve) => setTimeout(resolve)); + } + + var offcanvas = { + mixins: [Modal], + args: "mode", + props: { + mode: String, + flip: Boolean, + overlay: Boolean, + swiping: Boolean + }, + data: { + mode: "slide", + flip: false, + overlay: false, + clsPage: "uk-offcanvas-page", + clsContainer: "uk-offcanvas-container", + selPanel: ".uk-offcanvas-bar", + clsFlip: "uk-offcanvas-flip", + clsContainerAnimation: "uk-offcanvas-container-animation", + clsSidebarAnimation: "uk-offcanvas-bar-animation", + clsMode: "uk-offcanvas", + clsOverlay: "uk-offcanvas-overlay", + selClose: ".uk-offcanvas-close", + container: false, + swiping: true + }, + computed: { + clsFlip: ({ flip, clsFlip }) => flip ? clsFlip : "", + clsOverlay: ({ overlay, clsOverlay }) => overlay ? clsOverlay : "", + clsMode: ({ mode, clsMode }) => `${clsMode}-${mode}`, + clsSidebarAnimation: ({ mode, clsSidebarAnimation }) => mode === "none" || mode === "reveal" ? "" : clsSidebarAnimation, + clsContainerAnimation: ({ mode, clsContainerAnimation }) => mode !== "push" && mode !== "reveal" ? "" : clsContainerAnimation, + transitionElement({ mode }) { + return mode === "reveal" ? parent(this.panel) : this.panel; + } + }, + observe: swipe({ filter: ({ swiping }) => swiping }), + update: { + read() { + if (this.isToggled() && !isVisible(this.$el)) { + this.hide(); + } + }, + events: ["resize"] + }, + events: [ + { + name: "touchmove", + self: true, + passive: false, + filter: ({ overlay }) => overlay, + handler(e) { + e.cancelable && e.preventDefault(); + } + }, + { + name: "show", + self: true, + handler() { + if (this.mode === "reveal" && !hasClass(parent(this.panel), this.clsMode)) { + addClass(wrapAll(this.panel, "
        "), this.clsMode); + } + const { body, scrollingElement } = document; + addClass(body, this.clsContainer, this.clsFlip); + css(body, "touchAction", "pan-y pinch-zoom"); + css(this.$el, "display", "block"); + css(this.panel, "maxWidth", scrollingElement.clientWidth); + addClass(this.$el, this.clsOverlay); + addClass( + this.panel, + this.clsSidebarAnimation, + this.mode === "reveal" ? "" : this.clsMode + ); + height(body); + addClass(body, this.clsContainerAnimation); + this.clsContainerAnimation && suppressUserScale(); + } + }, + { + name: "hide", + self: true, + handler() { + removeClass(document.body, this.clsContainerAnimation); + css(document.body, "touchAction", ""); + } + }, + { + name: "hidden", + self: true, + handler() { + this.clsContainerAnimation && resumeUserScale(); + if (this.mode === "reveal" && hasClass(parent(this.panel), this.clsMode)) { + unwrap(this.panel); + } + removeClass(this.panel, this.clsSidebarAnimation, this.clsMode); + removeClass(this.$el, this.clsOverlay); + css(this.$el, "display", ""); + css(this.panel, "maxWidth", ""); + removeClass(document.body, this.clsContainer, this.clsFlip); + } + }, + { + name: "swipeLeft swipeRight", + handler(e) { + if (this.isToggled() && endsWith(e.type, "Left") ^ this.flip) { + this.hide(); + } + } + } + ] + }; + function suppressUserScale() { + getViewport().content += ",user-scalable=0"; + } + function resumeUserScale() { + const viewport = getViewport(); + viewport.content = viewport.content.replace(/,user-scalable=0$/, ""); + } + function getViewport() { + return $('meta[name="viewport"]', document.head) || append(document.head, ''); + } + + var overflowAuto = { + mixins: [Class], + props: { + selContainer: String, + selContent: String, + minHeight: Number + }, + data: { + selContainer: ".uk-modal", + selContent: ".uk-modal-dialog", + minHeight: 150 + }, + computed: { + container: ({ selContainer }, $el) => $el.closest(selContainer), + content: ({ selContent }, $el) => $el.closest(selContent) + }, + observe: resize({ + target: ({ container, content }) => [container, content] + }), + update: { + read() { + if (!this.content || !this.container || !isVisible(this.$el)) { + return false; + } + return { + max: Math.max( + this.minHeight, + height(this.container) - (dimensions$1(this.content).height - height(this.$el)) + ) + }; + }, + write({ max }) { + css(this.$el, { minHeight: this.minHeight, maxHeight: max }); + }, + events: ["resize"] + } + }; + + var responsive = { + props: ["width", "height"], + connected() { + addClass(this.$el, "uk-responsive-width"); + css(this.$el, "aspectRatio", `${this.width}/${this.height}`); + } + }; + + var scroll = { + props: { + offset: Number + }, + data: { + offset: 0 + }, + connected() { + registerClick(this); + }, + disconnected() { + unregisterClick(this); + }, + methods: { + async scrollTo(el) { + el = el && $(el) || document.body; + if (trigger(this.$el, "beforescroll", [this, el])) { + await scrollIntoView(el, { offset: this.offset }); + trigger(this.$el, "scrolled", [this, el]); + } + } + } + }; + const instances = /* @__PURE__ */ new Set(); + function registerClick(cmp) { + if (!instances.size) { + on(document, "click", clickHandler); + } + instances.add(cmp); + } + function unregisterClick(cmp) { + instances.delete(cmp); + if (!instances.size) { + off(document, "click", clickHandler); + } + } + function clickHandler(e) { + if (e.defaultPrevented) { + return; + } + for (const instance of instances) { + if (instance.$el.contains(e.target) && isSameSiteAnchor(instance.$el)) { + e.preventDefault(); + if (window.location.href !== instance.$el.href) { + window.history.pushState({}, "", instance.$el.href); + } + instance.scrollTo(getTargetedElement(instance.$el)); + } + } + } + + const clsInView = "uk-scrollspy-inview"; + var scrollspy = { + args: "cls", + props: { + cls: String, + target: String, + hidden: Boolean, + margin: String, + repeat: Boolean, + delay: Number + }, + data: () => ({ + cls: "", + target: false, + hidden: true, + margin: "-1px", + repeat: false, + delay: 0 + }), + computed: { + elements: ({ target }, $el) => target ? $$(target, $el) : [$el] + }, + watch: { + elements(elements) { + if (this.hidden) { + css(filter$1(elements, `:not(.${clsInView})`), "opacity", 0); + } + } + }, + connected() { + this.elementData = /* @__PURE__ */ new Map(); + }, + disconnected() { + for (const [el, state] of this.elementData.entries()) { + removeClass(el, clsInView, (state == null ? void 0 : state.cls) || ""); + } + delete this.elementData; + }, + observe: intersection({ + target: ({ elements }) => elements, + handler(records) { + const elements = this.elementData; + for (const { target: el, isIntersecting } of records) { + if (!elements.has(el)) { + elements.set(el, { + cls: data(el, "uk-scrollspy-class") || this.cls + }); + } + const state = elements.get(el); + if (!this.repeat && state.show) { + continue; + } + state.show = isIntersecting; + } + this.$emit(); + }, + options: ({ margin }) => ({ rootMargin: margin }), + args: { intersecting: false } + }), + update: [ + { + write(data) { + for (const [el, state] of this.elementData.entries()) { + if (state.show && !state.inview && !state.queued) { + state.queued = true; + data.promise = (data.promise || Promise.resolve()).then(() => new Promise((resolve) => setTimeout(resolve, this.delay))).then(() => { + this.toggle(el, true); + setTimeout(() => { + state.queued = false; + this.$emit(); + }, 300); + }); + } else if (!state.show && state.inview && !state.queued && this.repeat) { + this.toggle(el, false); + } + } + } + } + ], + methods: { + toggle(el, inview) { + var _a, _b; + const state = (_a = this.elementData) == null ? void 0 : _a.get(el); + if (!state) { + return; + } + (_b = state.off) == null ? void 0 : _b.call(state); + css(el, "opacity", !inview && this.hidden ? 0 : ""); + toggleClass(el, clsInView, inview); + toggleClass(el, state.cls); + let match; + if (match = state.cls.match(/\buk-animation-[\w-]+/g)) { + const removeAnimationClasses = () => removeClass(el, match); + if (inview) { + state.off = once(el, "animationcancel animationend", removeAnimationClasses, { + self: true + }); + } else { + removeAnimationClasses(); + } + } + trigger(el, inview ? "inview" : "outview"); + state.inview = inview; + } + } + }; + + var scrollspyNav = { + props: { + cls: String, + closest: Boolean, + scroll: Boolean, + target: String, + offset: Number + }, + data: { + cls: "uk-active", + closest: false, + scroll: false, + target: 'a[href]:not([role="button"])', + offset: 0 + }, + computed: { + links: ({ target }, $el) => $$(target, $el).filter(isSameSiteAnchor) + }, + watch: { + links(links) { + if (this.scroll) { + this.$create("scroll", links, { offset: this.offset }); + } + } + }, + observe: [intersection(), scroll$1()], + update: [ + { + read() { + const links = this.links.filter(getTargetedElement); + const targets = links.map(getTargetedElement); + const { length } = targets; + if (!length || !isVisible(this.$el)) { + return false; + } + const scrollElement = scrollParent(targets, true); + const { scrollTop, scrollHeight } = scrollElement; + const viewport = offsetViewport(scrollElement); + const max = scrollHeight - viewport.height; + let active = false; + if (scrollTop >= max) { + active = length - 1; + } else { + const offsetBy = this.offset + dimensions$1(getCoveringElement()).height + viewport.height * 0.1; + for (let i = 0; i < targets.length; i++) { + if (offset(targets[i]).top - viewport.top - offsetBy > 0) { + break; + } + active = +i; + } + } + return { active, links }; + }, + write({ active, links }) { + const elements = links.map((el) => el.closest(this.closest || "*")); + const changed = active !== false && !hasClass(elements[active], this.cls); + this.links.forEach((el) => el.blur()); + for (let i = 0; i < elements.length; i++) { + toggleClass(elements[i], this.cls, +i === active); + } + if (changed) { + trigger(this.$el, "active", [active, elements[active]]); + } + }, + events: ["scroll", "resize"] + } + ] + }; + + var sticky = { + mixins: [Class, Media], + props: { + position: String, + top: null, + bottom: null, + start: null, + end: null, + offset: String, + offsetEnd: String, + overflowFlip: Boolean, + animation: String, + clsActive: String, + clsInactive: String, + clsFixed: String, + clsBelow: String, + selTarget: String, + showOnUp: Boolean, + targetOffset: Number + }, + data: { + position: "top", + top: false, + bottom: false, + start: false, + end: false, + offset: 0, + offsetEnd: 0, + overflowFlip: false, + animation: "", + clsActive: "uk-active", + clsInactive: "", + clsFixed: "uk-sticky-fixed", + clsBelow: "uk-sticky-below", + selTarget: "", + showOnUp: false, + targetOffset: false + }, + computed: { + target: ({ selTarget }, $el) => selTarget && $(selTarget, $el) || $el + }, + connected() { + this.start = coerce(this.start || this.top); + this.end = coerce(this.end || this.bottom); + this.placeholder = $("+ .uk-sticky-placeholder", this.$el) || $('
        '); + this.isFixed = false; + this.setActive(false); + }, + beforeDisconnect() { + if (this.isFixed) { + this.hide(); + removeClass(this.target, this.clsInactive); + } + reset(this.$el); + remove$1(this.placeholder); + this.placeholder = null; + }, + observe: [ + viewport(), + scroll$1({ target: () => document.scrollingElement }), + resize({ + target: ({ $el }) => [$el, getVisibleParent($el), document.scrollingElement], + handler(entries) { + this.$emit( + this._data.resized && entries.some(({ target }) => target === getVisibleParent(this.$el)) ? "update" : "resize" + ); + this._data.resized = true; + } + }) + ], + events: [ + { + name: "load hashchange popstate", + el: () => window, + filter: ({ targetOffset }) => targetOffset !== false, + handler() { + const { scrollingElement } = document; + if (!location.hash || scrollingElement.scrollTop === 0) { + return; + } + setTimeout(() => { + const targetOffset = offset($(location.hash)); + const elOffset = offset(this.$el); + if (this.isFixed && intersectRect(targetOffset, elOffset)) { + scrollingElement.scrollTop = Math.ceil( + targetOffset.top - elOffset.height - toPx(this.targetOffset, "height", this.placeholder) - toPx(this.offset, "height", this.placeholder) + ); + } + }); + } + } + ], + update: [ + { + read({ height: height$1, width, margin, sticky }, types) { + this.inactive = !this.matchMedia || !isVisible(this.$el) || !this.$el.offsetHeight; + if (this.inactive) { + return; + } + const dynamicViewport = height(window); + const maxScrollHeight = Math.max( + 0, + document.scrollingElement.scrollHeight - dynamicViewport + ); + if (!maxScrollHeight) { + this.inactive = true; + return; + } + const hide = this.isFixed && types.has("update"); + if (hide) { + preventTransition(this.target); + this.hide(); + } + if (!this.active) { + ({ height: height$1, width } = dimensions$1(this.$el)); + margin = css(this.$el, "margin"); + } + if (hide) { + this.show(); + } + const viewport2 = toPx("100vh", "height"); + let position = this.position; + if (this.overflowFlip && height$1 > viewport2) { + position = position === "top" ? "bottom" : "top"; + } + const referenceElement = this.isFixed ? this.placeholder : this.$el; + let [offset$1, offsetEnd] = [this.offset, this.offsetEnd].map( + (value) => toPx(value, "height", sticky ? this.$el : referenceElement) + ); + if (position === "bottom" && (height$1 < dynamicViewport || this.overflowFlip)) { + offset$1 += dynamicViewport - height$1; + } + const elementBox = height$1 + offset$1 + offsetEnd; + const overflow = this.overflowFlip ? 0 : Math.max(0, elementBox - viewport2); + const topOffset = offset(referenceElement).top - // offset possible `transform: translateY` animation 'uk-animation-slide-top' while hiding + new DOMMatrix(css(referenceElement, "transform")).m42; + const elHeight = dimensions$1(this.$el).height; + const start = (this.start === false ? topOffset : parseProp(this.start, this.$el, topOffset)) - offset$1; + const end = this.end === false ? maxScrollHeight : Math.min( + maxScrollHeight, + parseProp(this.end, this.$el, topOffset + height$1, true) - elHeight - offset$1 + overflow + ); + sticky = !this.showOnUp && start + offset$1 === topOffset && end === Math.min( + maxScrollHeight, + parseProp(true, this.$el, 0, true) - elHeight - offset$1 + overflow + ) && css(getVisibleParent(this.$el), "overflowY") !== "hidden"; + return { + start, + end, + offset: offset$1, + overflow, + height: height$1, + elHeight, + width, + margin, + top: offsetPosition(referenceElement)[0], + sticky, + viewport: viewport2, + maxScrollHeight + }; + }, + write({ height, width, margin, offset, sticky }) { + if (this.inactive || sticky || !this.isFixed) { + reset(this.$el); + } + if (this.inactive) { + return; + } + if (sticky) { + height = width = margin = 0; + css(this.$el, { position: "sticky", top: offset }); + } + const { placeholder } = this; + css(placeholder, { height, width, margin }); + if (parent(placeholder) !== parent(this.$el) || sticky ^ index(placeholder) < index(this.$el)) { + (sticky ? before : after)(this.$el, placeholder); + placeholder.hidden = true; + } + }, + events: ["resize"] + }, + { + read({ + scroll: prevScroll = 0, + dir: prevDir = "down", + overflow, + overflowScroll = 0, + start, + end, + elHeight, + height, + sticky, + maxScrollHeight + }) { + const scroll2 = Math.min(document.scrollingElement.scrollTop, maxScrollHeight); + const dir = prevScroll <= scroll2 ? "down" : "up"; + const referenceElement = this.isFixed ? this.placeholder : this.$el; + return { + dir, + prevDir, + scroll: scroll2, + prevScroll, + below: scroll2 > offset(referenceElement).top + (sticky ? Math.min(height, elHeight) : height), + offsetParentTop: offset(referenceElement.offsetParent).top, + overflowScroll: clamp( + overflowScroll + clamp(scroll2, start, end) - clamp(prevScroll, start, end), + 0, + overflow + ) + }; + }, + write(data, types) { + const isScrollUpdate = types.has("scroll"); + const { + initTimestamp = 0, + dir, + prevDir, + scroll: scroll2, + prevScroll = 0, + top, + start, + below + } = data; + if (scroll2 < 0 || scroll2 === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) { + return; + } + const now = Date.now(); + if (now - initTimestamp > 300 || dir !== prevDir) { + data.initScroll = scroll2; + data.initTimestamp = now; + } + if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll2) <= 30 && Math.abs(prevScroll - scroll2) <= 10) { + return; + } + if (this.inactive || scroll2 < start || this.showOnUp && (scroll2 <= start || dir === "down" && isScrollUpdate || dir === "up" && !this.isFixed && !below)) { + if (!this.isFixed) { + if (Animation.inProgress(this.$el) && top > scroll2) { + Animation.cancel(this.$el); + this.hide(); + } + return; + } + if (this.animation && below) { + if (hasClass(this.$el, "uk-animation-leave")) { + return; + } + Animation.out(this.$el, this.animation).then(() => this.hide(), noop); + } else { + this.hide(); + } + } else if (this.isFixed) { + this.update(); + } else if (this.animation && below) { + this.show(); + Animation.in(this.$el, this.animation).catch(noop); + } else { + preventTransition(this.target); + this.show(); + } + }, + events: ["resize", "resizeViewport", "scroll"] + } + ], + methods: { + show() { + this.isFixed = true; + this.update(); + this.placeholder.hidden = false; + }, + hide() { + const { offset, sticky } = this._data; + this.setActive(false); + removeClass(this.$el, this.clsFixed, this.clsBelow); + if (sticky) { + css(this.$el, "top", offset); + } else { + reset(this.$el); + } + this.placeholder.hidden = true; + this.isFixed = false; + }, + update() { + let { + width, + scroll: scroll2 = 0, + overflow, + overflowScroll = 0, + start, + end, + offset, + offsetParentTop, + sticky, + below + } = this._data; + const active = start !== 0 || scroll2 > start; + if (!sticky) { + let position = "fixed"; + if (scroll2 > end) { + offset += end - offsetParentTop + overflowScroll - overflow; + position = "absolute"; + } + css(this.$el, { position, width, marginTop: 0 }, "important"); + } + css(this.$el, "top", offset - overflowScroll); + this.setActive(active); + toggleClass(this.$el, this.clsBelow, below); + addClass(this.$el, this.clsFixed); + }, + setActive(active) { + const prev = this.active; + this.active = active; + if (active) { + replaceClass(this.target, this.clsInactive, this.clsActive); + prev !== active && trigger(this.$el, "active"); + } else { + replaceClass(this.target, this.clsActive, this.clsInactive); + if (prev !== active) { + preventTransition(this.target); + trigger(this.$el, "inactive"); + } + } + } + } + }; + function parseProp(value, el, propOffset, padding) { + if (!value) { + return 0; + } + if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) { + return propOffset + toPx(value, "height", el, true); + } else { + const refElement = value === true ? getVisibleParent(el) : query(value, el); + return offset(refElement).bottom - (padding && (refElement == null ? void 0 : refElement.contains(el)) ? toFloat(css(refElement, "paddingBottom")) + toFloat(css(refElement, "borderBottomWidth")) : 0); + } + } + function coerce(value) { + if (value === "true") { + return true; + } else if (value === "false") { + return false; + } + return value; + } + function reset(el) { + css(el, { position: "", top: "", marginTop: "", width: "" }); + } + const clsTransitionDisable = "uk-transition-disable"; + function preventTransition(element) { + if (!hasClass(element, clsTransitionDisable)) { + addClass(element, clsTransitionDisable); + requestAnimationFrame(() => removeClass(element, clsTransitionDisable)); + } + } + function getVisibleParent(element) { + while (element = parent(element)) { + if (isVisible(element)) { + return element; + } + } + } + + var svg = { + mixins: [Svg], + args: "src", + props: { + src: String, + icon: String, + attributes: "list", + strokeAnimation: Boolean + }, + data: { + strokeAnimation: false + }, + observe: [ + mutation({ + async handler() { + const svg = await this.svg; + if (svg) { + applyAttributes.call(this, svg); + } + }, + options: { + attributes: true, + attributeFilter: ["id", "class", "style"] + } + }) + ], + async connected() { + if (includes(this.src, "#")) { + [this.src, this.icon] = this.src.split("#", 2); + } + const svg = await this.svg; + if (svg) { + applyAttributes.call(this, svg); + if (this.strokeAnimation) { + applyAnimation(svg); + } + } + }, + methods: { + async getSvg() { + if (isTag(this.$el, "img") && !this.$el.complete && this.$el.loading === "lazy") { + await new Promise((resolve) => once(this.$el, "load", resolve)); + } + return parseSVG(await loadSVG(this.src), this.icon) || Promise.reject("SVG not found."); + } + } + }; + function applyAttributes(el) { + const { $el } = this; + addClass(el, attr($el, "class"), "uk-svg"); + for (let i = 0; i < $el.style.length; i++) { + const prop = $el.style[i]; + css(el, prop, css($el, prop)); + } + for (const attribute in this.attributes) { + const [prop, value] = this.attributes[attribute].split(":", 2); + attr(el, prop, value); + } + el.ariaHidden = this.$el.ariaHidden; + if (!this.$el.id) { + removeAttr(el, "id"); + } + } + const loadSVG = memoize(async (src) => { + if (src) { + const response = await fetch(src); + if (response.headers.get("Content-Type") === "image/svg+xml") { + return response.text(); + } + } + return Promise.reject(); + }); + function applyAnimation(el) { + const length = getMaxPathLength(el); + if (length) { + css(el, "--uk-animation-stroke", length); + } + } + + const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]"; + var Switcher = { + mixins: [Togglable], + args: "connect", + props: { + connect: String, + toggle: String, + itemNav: String, + active: Number, + followFocus: Boolean, + swiping: Boolean + }, + data: { + connect: "~.uk-switcher", + toggle: "> * > :first-child", + itemNav: false, + active: 0, + cls: "uk-active", + attrItem: "uk-switcher-item", + selVertical: ".uk-nav", + followFocus: false, + swiping: true + }, + computed: { + connects: { + get: ({ connect }, $el) => queryAll(connect, $el), + observe: ({ connect }) => connect + }, + connectChildren() { + return this.connects.map((el) => children(el)).flat(); + }, + toggles: ({ toggle }, $el) => $$(toggle, $el), + children(_, $el) { + return children($el).filter( + (child) => this.toggles.some((toggle) => child.contains(toggle)) + ); + } + }, + watch: { + connects(connects) { + if (this.swiping) { + css(connects, "touchAction", "pan-y pinch-zoom"); + } + this.$emit(); + }, + connectChildren() { + let index = Math.max(0, this.index()); + for (const el of this.connects) { + children(el).forEach((child, i) => toggleClass(child, this.cls, i === index)); + } + this.$emit(); + }, + toggles(toggles) { + this.$emit(); + const active = this.index(); + this.show(~active ? active : toggles[this.active] || toggles[0]); + } + }, + connected() { + this.$el.role = "tablist"; + }, + observe: [ + lazyload({ targets: ({ connectChildren }) => connectChildren }), + swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping }) + ], + events: [ + { + name: "click keydown", + delegate: ({ toggle }) => toggle, + handler(e) { + if (!matches(e.current, selDisabled) && (e.type === "click" || e.keyCode === keyMap.SPACE)) { + maybeDefaultPreventClick(e); + this.show(e.current); + } + } + }, + { + name: "keydown", + delegate: ({ toggle }) => toggle, + handler(e) { + const { current, keyCode } = e; + const isVertical = matches(this.$el, this.selVertical); + let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT && !isVertical || keyCode === keyMap.UP && isVertical ? "previous" : keyCode === keyMap.RIGHT && !isVertical || keyCode === keyMap.DOWN && isVertical ? "next" : -1; + if (~i) { + e.preventDefault(); + const toggles = this.toggles.filter((el) => !matches(el, selDisabled)); + const next = toggles[getIndex(i, toggles, toggles.indexOf(current))]; + next.focus(); + if (this.followFocus) { + this.show(next); + } + } + } + }, + { + name: "click", + el: ({ $el, connects, itemNav }) => connects.concat(itemNav ? queryAll(itemNav, $el) : []), + delegate: ({ attrItem }) => `[${attrItem}],[data-${attrItem}]`, + handler(e) { + if (e.target.closest("a,button")) { + maybeDefaultPreventClick(e); + this.show(data(e.current, this.attrItem)); + } + } + }, + { + name: "swipeRight swipeLeft", + filter: ({ swiping }) => swiping, + el: ({ connects }) => connects, + handler({ type }) { + this.show(endsWith(type, "Left") ? "next" : "previous"); + } + } + ], + update() { + var _a; + for (const el of this.connects) { + if (isTag(el, "ul")) { + el.role = "presentation"; + } + } + attr(children(this.$el), "role", "presentation"); + for (const index in this.toggles) { + const toggle = this.toggles[index]; + const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index]; + toggle.role = "tab"; + if (!item) { + continue; + } + toggle.id = generateId(this, toggle); + item.id = generateId(this, item); + toggle.ariaControls = item.id; + attr(item, { role: "tabpanel", "aria-labelledby": toggle.id }); + } + attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null); + }, + methods: { + index() { + return findIndex(this.children, (el) => hasClass(el, this.cls)); + }, + show(item) { + const toggles = this.toggles.filter((el) => !matches(el, selDisabled)); + const prev = this.index(); + const next = getIndex( + !isNode(item) || includes(toggles, item) ? item : 0, + toggles, + getIndex(this.toggles[prev], toggles) + ); + const active = getIndex(toggles[next], this.toggles); + this.children.forEach((child, i) => { + toggleClass(child, this.cls, active === i); + attr(this.toggles[i], { + "aria-selected": active === i, + tabindex: active === i ? null : -1 + }); + }); + const animate = prev >= 0 && prev !== next; + this.connects.forEach(async ({ children: children2 }) => { + const actives = toArray(children2).filter( + (child, i) => i !== active && hasClass(child, this.cls) + ); + if (await this.toggleElement(actives, false, animate)) { + await this.toggleElement(children2[active], true, animate); + } + }); + } + } + }; + + var tab = { + mixins: [Class], + extends: Switcher, + props: { + media: Boolean + }, + data: { + media: 960, + attrItem: "uk-tab-item", + selVertical: ".uk-tab-left,.uk-tab-right" + }, + connected() { + const cls = hasClass(this.$el, "uk-tab-left") ? "uk-tab-left" : hasClass(this.$el, "uk-tab-right") ? "uk-tab-right" : false; + if (cls) { + this.$create("toggle", this.$el, { cls, mode: "media", media: this.media }); + } + } + }; + + const KEY_ENTER = 13; + const KEY_SPACE = 32; + var toggle = { + mixins: [Media, Togglable], + args: "target", + props: { + href: String, + target: null, + mode: "list", + queued: Boolean + }, + data: { + href: false, + target: false, + mode: "click", + queued: true + }, + computed: { + target: { + get: ({ target }, $el) => { + target = queryAll(target || $el.hash, $el); + return target.length ? target : [$el]; + }, + observe: ({ target }) => target + } + }, + connected() { + if (!includes(this.mode, "media")) { + if (!isFocusable(this.$el)) { + this.$el.tabIndex = 0; + } + if (!this.cls && isTag(this.$el, "a")) { + this.$el.role = "button"; + } + } + }, + observe: lazyload({ targets: ({ target }) => target }), + events: [ + { + name: pointerDown$1, + filter: ({ mode }) => includes(mode, "hover"), + handler(e) { + this._preventClick = null; + if (!isTouch(e) || isBoolean(this._showState) || this.$el.disabled) { + return; + } + trigger(this.$el, "focus"); + once( + document, + pointerDown$1, + () => trigger(this.$el, "blur"), + true, + (e2) => !this.$el.contains(e2.target) + ); + if (includes(this.mode, "click")) { + this._preventClick = true; + } + } + }, + { + // mouseenter mouseleave are added because of Firefox bug, + // where pointerleave is triggered immediately after pointerenter on scroll + name: `mouseenter mouseleave ${pointerEnter} ${pointerLeave} focus blur`, + filter: ({ mode }) => includes(mode, "hover"), + handler(e) { + if (isTouch(e) || this.$el.disabled || document.readyState === "loading") { + return; + } + const show = includes(["mouseenter", pointerEnter, "focus"], e.type); + const expanded = this.isToggled(this.target); + if (!show && (!isBoolean(this._showState) || e.type !== "blur" && matches(this.$el, ":focus") || e.type === "blur" && matches(this.$el, ":hover"))) { + if (expanded === this._showState) { + this._showState = null; + } + return; + } + if (show && isBoolean(this._showState) && expanded !== this._showState) { + return; + } + this._showState = show ? expanded : null; + this.toggle(`toggle${show ? "show" : "hide"}`); + } + }, + { + name: "keydown", + filter: ({ $el, mode }) => includes(mode, "click") && !isTag($el, "input"), + handler(e) { + if (e.keyCode === KEY_SPACE || e.keyCode === KEY_ENTER) { + e.preventDefault(); + this.$el.click(); + } + } + }, + { + name: "click", + filter: ({ mode }) => ["click", "hover"].some((m) => includes(mode, m)), + handler(e) { + if (e.defaultPrevented) { + return; + } + const link = e.target.closest("a[href]"); + const isButtonLike = isSameSiteAnchor(link) && (!link.hash || matches(this.target, link.hash)); + if (this._preventClick || isButtonLike || link && !this.isToggled(this.target)) { + e.preventDefault(); + } + if (!this._preventClick && includes(this.mode, "click") && (!link || isButtonLike || e.defaultPrevented)) { + this.toggle(); + } + } + }, + { + name: "mediachange", + filter: ({ mode }) => includes(mode, "media"), + el: ({ target }) => target, + handler(e, mediaObj) { + if (mediaObj.matches ^ this.isToggled(this.target)) { + this.toggle(); + } + } + } + ], + methods: { + async toggle(type) { + if (!trigger(this.target, type || "toggle", [this])) { + return; + } + if (hasAttr(this.$el, "aria-expanded")) { + this.$el.ariaExpanded = !this.isToggled(this.target); + } + if (!this.queued) { + return this.toggleElement(this.target); + } + const leaving = this.target.filter((el) => hasClass(el, this.clsLeave)); + if (leaving.length) { + for (const el of this.target) { + const isLeaving = includes(leaving, el); + this.toggleElement(el, isLeaving, isLeaving); + } + return; + } + const toggled = this.target.filter(this.isToggled); + if (await this.toggleElement(toggled, false)) { + await this.toggleElement( + this.target.filter((el) => !includes(toggled, el)), + true + ); + } + } + } + }; + + var components = /*#__PURE__*/Object.freeze({ + __proto__: null, + Accordion: Accordion, + Alert: alert, + Close: Close, + Cover: cover, + Drop: drop, + DropParentIcon: IconComponent, + Dropdown: drop, + Dropnav: Dropnav, + FormCustom: formCustom, + Grid: grid, + HeightMatch: heightMatch, + HeightPlaceholder: heightPlaceholder, + HeightViewport: heightViewport, + Icon: Icon, + Img: img, + Inverse: inverse, + Leader: leader, + Margin: Margin, + Marker: Marker, + Modal: modal, + Nav: nav, + NavParentIcon: NavParentIcon, + Navbar: navbar, + NavbarParentIcon: IconComponent, + NavbarToggleIcon: NavbarToggleIcon, + Offcanvas: offcanvas, + OverflowAuto: overflowAuto, + OverlayIcon: IconComponent, + PaginationNext: PaginationNext, + PaginationPrevious: PaginationPrevious, + Responsive: responsive, + Scroll: scroll, + Scrollspy: scrollspy, + ScrollspyNav: scrollspyNav, + SearchIcon: Search, + SlidenavNext: Slidenav, + SlidenavPrevious: Slidenav, + Spinner: Spinner, + Sticky: sticky, + Svg: svg, + Switcher: Switcher, + Tab: tab, + Toggle: toggle, + Totop: Totop, + Video: Video + }); + + each(components, (component, name) => App.component(name, component)); + boot(App); + + each(components$1, (component, name) => App.component(name, component)); + + return App; + +})); diff --git a/web/static/uikit/js/uikit.min.js b/web/static/uikit/js/uikit.min.js new file mode 100644 index 0000000..dc0d189 --- /dev/null +++ b/web/static/uikit/js/uikit.min.js @@ -0,0 +1 @@ +/*! UIkit 3.23.12 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */(function(Se,Ie){typeof exports=="object"&&typeof module<"u"?module.exports=Ie():typeof define=="function"&&define.amd?define("uikit",Ie):(Se=typeof globalThis<"u"?globalThis:Se||self,Se.UIkit=Ie())})(this,function(){"use strict";const{hasOwnProperty:Se,toString:Ie}=Object.prototype;function gt(t,e){return Se.call(t,e)}const lr=/\B([A-Z])/g,Ft=ct(t=>t.replace(lr,"-$1").toLowerCase()),hr=/-(\w)/g,Ee=ct(t=>(t.charAt(0).toLowerCase()+t.slice(1)).replace(hr,(e,i)=>i.toUpperCase())),Ht=ct(t=>t.charAt(0).toUpperCase()+t.slice(1));function wt(t,e){var i;return(i=t==null?void 0:t.startsWith)==null?void 0:i.call(t,e)}function oe(t,e){var i;return(i=t==null?void 0:t.endsWith)==null?void 0:i.call(t,e)}function v(t,e){var i;return(i=t==null?void 0:t.includes)==null?void 0:i.call(t,e)}function xt(t,e){var i;return(i=t==null?void 0:t.findIndex)==null?void 0:i.call(t,e)}const{isArray:J,from:re}=Array,{assign:ft}=Object;function ot(t){return typeof t=="function"}function Ct(t){return t!==null&&typeof t=="object"}function Te(t){return Ie.call(t)==="[object Object]"}function si(t){return Ct(t)&&t===t.window}function Ce(t){return Wi(t)===9}function Pe(t){return Wi(t)>=1}function ae(t){return Wi(t)===1}function Wi(t){return!si(t)&&Ct(t)&&t.nodeType}function le(t){return typeof t=="boolean"}function H(t){return typeof t=="string"}function _e(t){return typeof t=="number"}function mt(t){return _e(t)||H(t)&&!isNaN(t-parseFloat(t))}function ni(t){return!(J(t)?t.length:Ct(t)&&Object.keys(t).length)}function X(t){return t===void 0}function ji(t){return le(t)?t:t==="true"||t==="1"||t===""?!0:t==="false"||t==="0"?!1:t}function $t(t){const e=Number(t);return isNaN(e)?!1:e}function S(t){return parseFloat(t)||0}function R(t){return t&&E(t)[0]}function E(t){return Pe(t)?[t]:Array.from(t||[]).filter(Pe)}function Lt(t){if(si(t))return t;t=R(t);const e=Ce(t)?t:t==null?void 0:t.ownerDocument;return(e==null?void 0:e.defaultView)||window}function Ae(t,e){return t===e||Ct(t)&&Ct(e)&&Object.keys(t).length===Object.keys(e).length&&he(t,(i,s)=>i===e[s])}function Ri(t,e,i){return t.replace(new RegExp(`${e}|${i}`,"g"),s=>s===e?i:e)}function Wt(t){return t[t.length-1]}function he(t,e){for(const i in t)if(e(t[i],i)===!1)return!1;return!0}function Vs(t,e){return t.slice().sort(({[e]:i=0},{[e]:s=0})=>i>s?1:s>i?-1:0)}function jt(t,e){return t.reduce((i,s)=>i+S(ot(e)?e(s):s[e]),0)}function Ys(t,e){const i=new Set;return t.filter(({[e]:s})=>i.has(s)?!1:i.add(s))}function oi(t,e){return e.reduce((i,s)=>({...i,[s]:t[s]}),{})}function K(t,e=0,i=1){return Math.min(Math.max($t(t)||0,e),i)}function A(){}function ri(...t){return[["bottom","top"],["right","left"]].every(([e,i])=>Math.min(...t.map(({[e]:s})=>s))-Math.max(...t.map(({[i]:s})=>s))>0)}function ai(t,e){return t.x<=e.right&&t.x>=e.left&&t.y<=e.bottom&&t.y>=e.top}function qi(t,e,i){const s=e==="width"?"height":"width";return{[s]:t[e]?Math.round(i*t[s]/t[e]):t[s],[e]:i}}function Gs(t,e){t={...t};for(const i in t)t=t[i]>e[i]?qi(t,i,e[i]):t;return t}function cr(t,e){t=Gs(t,e);for(const i in t)t=t[i]e[i]||(e[i]=t(i,...s))}function I(t,...e){for(const i of E(t)){const s=Rt(e).filter(n=>!$(i,n));s.length&&i.classList.add(...s)}}function _(t,...e){for(const i of E(t)){const s=Rt(e).filter(n=>$(i,n));s.length&&i.classList.remove(...s)}}function li(t,e,i){i=Rt(i),e=Rt(e).filter(s=>!v(i,s)),_(t,e),I(t,i)}function $(t,e){return[e]=Rt(e),E(t).some(i=>i.classList.contains(e))}function L(t,e,i){const s=Rt(e);X(i)||(i=!!i);for(const n of E(t))for(const o of s)n.classList.toggle(o,i)}function Rt(t){return t?J(t)?t.map(Rt).flat():String(t).split(" ").filter(Boolean):[]}function k(t,e,i){var s;if(Ct(e)){for(const n in e)k(t,n,e[n]);return}if(X(i))return(s=R(t))==null?void 0:s.getAttribute(e);for(const n of E(t))ot(i)&&(i=i.call(n,k(n,e))),i===null?Oe(n,e):n.setAttribute(e,i)}function Pt(t,e){return E(t).some(i=>i.hasAttribute(e))}function Oe(t,e){E(t).forEach(i=>i.removeAttribute(e))}function Z(t,e){for(const i of[e,`data-${e}`])if(Pt(t,i))return k(t,i)}const qt=typeof window<"u",U=qt&&document.dir==="rtl",ce=qt&&"ontouchstart"in window,ue=qt&&window.PointerEvent,ut=ue?"pointerdown":ce?"touchstart":"mousedown",Me=ue?"pointermove":ce?"touchmove":"mousemove",_t=ue?"pointerup":ce?"touchend":"mouseup",At=ue?"pointerenter":ce?"":"mouseenter",Ut=ue?"pointerleave":ce?"":"mouseleave",hi=ue?"pointercancel":"touchcancel",ur={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function Vi(t){return E(t).some(e=>ur[e.tagName.toLowerCase()])}const dr=qt&&Element.prototype.checkVisibility||function(){return this.offsetWidth||this.offsetHeight||this.getClientRects().length};function q(t){return E(t).some(e=>dr.call(e))}const De="input,select,textarea,button";function ci(t){return E(t).some(e=>C(e,De))}const de=`${De},a[href],[tabindex]`;function Be(t){return C(t,de)}function O(t){var e;return(e=R(t))==null?void 0:e.parentElement}function Ne(t,e){return E(t).filter(i=>C(i,e))}function C(t,e){return E(t).some(i=>i.matches(e))}function fe(t,e){const i=[];for(;t=O(t);)(!e||C(t,e))&&i.push(t);return i}function N(t,e){t=R(t);const i=t?re(t.children):[];return e?Ne(i,e):i}function yt(t,e){return e?E(t).indexOf(R(e)):N(O(t)).indexOf(t)}function Vt(t){return t=R(t),t&&["origin","pathname","search"].every(e=>t[e]===location[e])}function ui(t){if(Vt(t)){const{hash:e,ownerDocument:i}=R(t),s=decodeURIComponent(e).slice(1);return s?i.getElementById(s)||i.getElementsByName(s)[0]:i.documentElement}}function et(t,e){return Yi(t,Xs(t,e))}function ze(t,e){return Fe(t,Xs(t,e))}function Yi(t,e){return R(Zs(t,R(e),"querySelector"))}function Fe(t,e){return E(Zs(t,R(e),"querySelectorAll"))}function Xs(t,e=document){return Ce(e)||Js(t).isContextSelector?e:e.ownerDocument}const fr=/([!>+~-])(?=\s+[!>+~-]|\s*$)/g,pr=/(\([^)]*\)|[^,])+/g,Js=ct(t=>{let e=!1;if(!t||!H(t))return{};const i=[];for(let s of t.match(pr))s=s.trim().replace(fr,"$1 *"),e||(e=["!","+","~","-",">"].includes(s[0])),i.push(s);return{selector:i.join(","),selectors:i,isContextSelector:e}}),gr=/(\([^)]*\)|\S)*/,Ks=ct(t=>{t=t.slice(1).trim();const[e]=t.match(gr);return[e,t.slice(e.length+1)]});function Zs(t,e=document,i){var s;const n=Js(t);if(!n.isContextSelector)return n.selector?Gi(e,i,n.selector):t;t="";const o=n.selectors.length===1;for(let r of n.selectors){let a,l=e;if(r[0]==="!"&&([a,r]=Ks(r),l=(s=e.parentElement)==null?void 0:s.closest(a),!r&&o)||l&&r[0]==="-"&&([a,r]=Ks(r),l=l.previousElementSibling,l=C(l,a)?l:null,!r&&o))return l;if(l){if(o)return r[0]==="~"||r[0]==="+"?(r=`:scope > :nth-child(${yt(l)+1}) ${r}`,l=l.parentElement):r[0]===">"&&(r=`:scope ${r}`),Gi(l,i,r);t+=`${t?",":""}${mr(l)} ${r}`}}return Ce(e)||(e=e.ownerDocument),Gi(e,i,t)}function Gi(t,e,i){try{return t[e](i)}catch{return null}}function mr(t){const e=[];for(;t.parentNode;){const i=k(t,"id");if(i){e.unshift(`#${Xi(i)}`);break}else{let{tagName:s}=t;s!=="HTML"&&(s+=`:nth-child(${yt(t)+1})`),e.unshift(s),t=t.parentNode}}return e.join(" > ")}function Xi(t){return H(t)?CSS.escape(t):""}function w(...t){let[e,i,s,n,o=!1]=Ji(t);n.length>1&&(n=br(n)),o!=null&&o.self&&(n=wr(n)),s&&(n=vr(s,n));for(const r of i)for(const a of e)a.addEventListener(r,n,o);return()=>Yt(e,i,n,o)}function Yt(...t){let[e,i,,s,n=!1]=Ji(t);for(const o of i)for(const r of e)r.removeEventListener(o,s,n)}function z(...t){const[e,i,s,n,o=!1,r]=Ji(t),a=w(e,i,s,l=>{const c=!r||r(l);c&&(a(),n(l,c))},o);return a}function m(t,e,i){return Ki(t).every(s=>s.dispatchEvent(pe(e,!0,!0,i)))}function pe(t,e=!0,i=!1,s){return H(t)&&(t=new CustomEvent(t,{bubbles:e,cancelable:i,detail:s})),t}function Ji(t){return t[0]=Ki(t[0]),H(t[1])&&(t[1]=t[1].split(" ")),ot(t[2])&&t.splice(2,0,!1),t}function vr(t,e){return i=>{const s=t[0]===">"?Fe(t,i.currentTarget).reverse().find(n=>n.contains(i.target)):i.target.closest(t);s&&(i.current=s,e.call(this,i),delete i.current)}}function br(t){return e=>J(e.detail)?t(e,...e.detail):t(e)}function wr(t){return function(e){if(e.target===e.currentTarget||e.target===e.current)return t.call(null,e)}}function Qs(t){return t&&"addEventListener"in t}function xr(t){return Qs(t)?t:R(t)}function Ki(t){return J(t)?t.map(xr).filter(Boolean):H(t)?Fe(t):Qs(t)?[t]:E(t)}function pt(t){return t.pointerType==="touch"||!!t.touches}function kt(t){var e,i;const{clientX:s,clientY:n}=((e=t.touches)==null?void 0:e[0])||((i=t.changedTouches)==null?void 0:i[0])||t;return{x:s,y:n}}const $r={"animation-iteration-count":!0,"column-count":!0,"fill-opacity":!0,"flex-grow":!0,"flex-shrink":!0,"font-weight":!0,"line-height":!0,opacity:!0,order:!0,orphans:!0,"stroke-dasharray":!0,"stroke-dashoffset":!0,widows:!0,"z-index":!0,zoom:!0};function h(t,e,i,s){const n=E(t);for(const o of n)if(H(e)){if(e=di(e),X(i))return getComputedStyle(o).getPropertyValue(e);o.style.setProperty(e,mt(i)&&!$r[e]&&!tn(e)?`${i}px`:i||_e(i)?i:"",s)}else if(J(e)){const r={};for(const a of e)r[a]=h(o,a);return r}else if(Ct(e))for(const r in e)h(o,r,e[r],i);return n[0]}function St(t,e){for(const i in e)h(t,i,"")}const di=ct(t=>{if(tn(t))return t;t=Ft(t);const{style:e}=document.documentElement;if(t in e)return t;for(const i of["webkit","moz"]){const s=`-${i}-${t}`;if(s in e)return s}});function tn(t){return wt(t,"--")}const Zi="uk-transition",Qi="transitionend",ts="transitioncanceled";function yr(t,e,i=400,s="linear"){return i=Math.round(i),Promise.all(E(t).map(n=>new Promise((o,r)=>{for(const c in e)h(n,c);const a=setTimeout(()=>m(n,Qi),i);z(n,[Qi,ts],({type:c})=>{clearTimeout(a),_(n,Zi),St(n,l),c===ts?r():o(n)},{self:!0}),I(n,Zi);const l={transitionProperty:Object.keys(e).map(di).join(","),transitionDuration:`${i}ms`,transitionTimingFunction:s};h(n,{...l,...e})})))}const M={start:yr,async stop(t){m(t,Qi),await Promise.resolve()},async cancel(t){m(t,ts),await Promise.resolve()},inProgress(t){return $(t,Zi)}},He="uk-animation",en="animationend",fi="animationcanceled";function sn(t,e,i=200,s,n){return Promise.all(E(t).map(o=>new Promise((r,a)=>{$(o,He)&&m(o,fi);const l=[e,He,`${He}-${n?"leave":"enter"}`,s&&`uk-transform-origin-${s}`,n&&`${He}-reverse`],c=setTimeout(()=>m(o,en),i);z(o,[en,fi],({type:u})=>{clearTimeout(c),u===fi?a():r(o),h(o,"animationDuration",""),_(o,l)},{self:!0}),h(o,"animationDuration",`${i}ms`),I(o,l)})))}const Ot={in:sn,out(t,e,i,s){return sn(t,e,i,s,!0)},inProgress(t){return $(t,He)},cancel(t){m(t,fi)}};function kr(t){if(document.readyState!=="loading"){t();return}z(document,"DOMContentLoaded",t)}function F(t,...e){return e.some(i=>{var s;return((s=t==null?void 0:t.tagName)==null?void 0:s.toLowerCase())===i.toLowerCase()})}function nn(t){return t=x(t),t&&(t.innerHTML=""),t}function vt(t,e){return X(e)?x(t).innerHTML:W(nn(t),e)}const Sr=mi("prepend"),W=mi("append"),pi=mi("before"),gi=mi("after");function mi(t){return function(e,i){var s;const n=E(H(i)?It(i):i);return(s=x(e))==null||s[t](...n),on(n)}}function Q(t){E(t).forEach(e=>e.remove())}function Le(t,e){for(e=R(pi(t,e));e.firstElementChild;)e=e.firstElementChild;return W(e,t),e}function es(t,e){return E(E(t).map(i=>i.hasChildNodes()?Le(re(i.childNodes),e):W(i,e)))}function We(t){E(t).map(O).filter((e,i,s)=>s.indexOf(e)===i).forEach(e=>e.replaceWith(...e.childNodes))}const Ir=/^<(\w+)\s*\/?>(?:<\/\1>)?$/;function It(t){const e=Ir.exec(t);if(e)return document.createElement(e[1]);const i=document.createElement("template");return i.innerHTML=t.trim(),on(i.content.childNodes)}function on(t){return t.length>1?t:t[0]}function Mt(t,e){if(ae(t))for(e(t),t=t.firstElementChild;t;)Mt(t,e),t=t.nextElementSibling}function x(t,e){return rn(t)?R(It(t)):Yi(t,e)}function D(t,e){return rn(t)?E(It(t)):Fe(t,e)}function rn(t){return H(t)&&wt(t.trim(),"<")}const Gt={width:["left","right"],height:["top","bottom"]};function g(t){const e=ae(t)?R(t).getBoundingClientRect():{height:tt(t),width:vi(t),top:0,left:0};return{height:e.height,width:e.width,top:e.top,left:e.left,bottom:e.top+e.height,right:e.left+e.width}}function T(t,e){e&&h(t,{left:0,top:0});const i=g(t);if(t){const{scrollY:s,scrollX:n}=Lt(t),o={height:s,width:n};for(const r in Gt)for(const a of Gt[r])i[a]+=o[r]}if(!e)return i;for(const s of["left","top"])h(t,s,e[s]-i[s])}function is(t){let{top:e,left:i}=T(t);const{ownerDocument:{body:s,documentElement:n},offsetParent:o}=R(t);let r=o||n;for(;r&&(r===s||r===n)&&h(r,"position")==="static";)r=r.parentNode;if(ae(r)){const a=T(r);e-=a.top+S(h(r,"borderTopWidth")),i-=a.left+S(h(r,"borderLeftWidth"))}return{top:e-S(h(t,"marginTop")),left:i-S(h(t,"marginLeft"))}}function je(t){t=R(t);const e=[t.offsetTop,t.offsetLeft];for(;t=t.offsetParent;)if(e[0]+=t.offsetTop+S(h(t,"borderTopWidth")),e[1]+=t.offsetLeft+S(h(t,"borderLeftWidth")),h(t,"position")==="fixed"){const i=Lt(t);return e[0]+=i.scrollY,e[1]+=i.scrollX,e}return e}const tt=an("height"),vi=an("width");function an(t){const e=Ht(t);return(i,s)=>{if(X(s)){if(si(i))return i[`inner${e}`];if(Ce(i)){const n=i.documentElement;return Math.max(n[`offset${e}`],n[`scroll${e}`])}return i=R(i),s=h(i,t),s=s==="auto"?i[`offset${e}`]:S(s)||0,s-ge(i,t)}else return h(i,t,!s&&s!==0?"":+s+ge(i,t)+"px")}}function ge(t,e,i="border-box"){return h(t,"boxSizing")===i?jt(Gt[e],s=>S(h(t,`padding-${s}`))+S(h(t,`border-${s}-width`))):0}function bi(t){for(const e in Gt)for(const i in Gt[e])if(Gt[e][i]===t)return Gt[e][1-i];return t}function G(t,e="width",i=window,s=!1){return H(t)?jt(Tr(t),n=>{const o=Pr(n);return o?_r(o==="vh"?Ar():o==="vw"?vi(Lt(i)):s?i[`offset${Ht(e)}`]:g(i)[e],n):n}):S(t)}const Er=/-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g,Tr=ct(t=>t.toString().replace(/\s/g,"").match(Er)||[]),Cr=/(?:v[hw]|%)$/,Pr=ct(t=>(t.match(Cr)||[])[0]);function _r(t,e){return t*S(e)/100}let Re,me;function Ar(){return Re||(me||(me=x("
        "),h(me,{height:"100vh",position:"fixed"}),w(window,"resize",()=>Re=null)),W(document.body,me),Re=me.clientHeight,Q(me),Re)}const Dt={read:Or,write:Mr,clear:Dr,flush:ln},wi=[],xi=[];function Or(t){return wi.push(t),ns(),t}function Mr(t){return xi.push(t),ns(),t}function Dr(t){cn(wi,t),cn(xi,t)}let ss=!1;function ln(){hn(wi),hn(xi.splice(0)),ss=!1,(wi.length||xi.length)&&ns()}function ns(){ss||(ss=!0,queueMicrotask(ln))}function hn(t){let e;for(;e=t.shift();)try{e()}catch(i){console.error(i)}}function cn(t,e){const i=t.indexOf(e);return~i&&t.splice(i,1)}class un{init(){this.positions=[];let e;this.unbind=w(document,"mousemove",i=>e=kt(i)),this.interval=setInterval(()=>{e&&(this.positions.push(e),this.positions.length>5&&this.positions.shift())},50)}cancel(){var e;(e=this.unbind)==null||e.call(this),clearInterval(this.interval)}movesTo(e){if(!this.positions||this.positions.length<2)return!1;const i=g(e),{left:s,right:n,top:o,bottom:r}=i,[a]=this.positions,l=Wt(this.positions),c=[a,l];return ai(l,i)?!1:[[{x:s,y:o},{x:n,y:r}],[{x:s,y:r},{x:n,y:o}]].some(d=>{const f=Br(c,d);return f&&ai(f,i)})}}function Br([{x:t,y:e},{x:i,y:s}],[{x:n,y:o},{x:r,y:a}]){const l=(a-o)*(i-t)-(r-n)*(s-e);if(l===0)return!1;const c=((r-n)*(e-o)-(a-o)*(t-n))/l;return c<0?!1:{x:t+c*(i-t),y:e+c*(s-e)}}function dn(t,e,i={},{intersecting:s=!0}={}){const n=new IntersectionObserver(s?(o,r)=>{o.some(a=>a.isIntersecting)&&e(o,r)}:e,i);for(const o of E(t))n.observe(o);return n}const Nr=qt&&window.ResizeObserver;function qe(t,e,i={box:"border-box"}){if(Nr)return fn(ResizeObserver,t,e,i);const s=[w(window,"load resize",e),w(document,"loadedmetadata load",e,!0)];return{disconnect:()=>s.map(n=>n())}}function os(t){return{disconnect:w([window,window.visualViewport],"resize",t)}}function rs(t,e,i){return fn(MutationObserver,t,e,i)}function fn(t,e,i,s){const n=new t(i);for(const o of E(e))n.observe(o,s);return n}function as(t){hs(t)&&cs(t,{func:"playVideo",method:"play"}),ls(t)&&t.play().catch(A)}function $i(t){hs(t)&&cs(t,{func:"pauseVideo",method:"pause"}),ls(t)&&t.pause()}function pn(t){hs(t)&&cs(t,{func:"mute",method:"setVolume",value:0}),ls(t)&&(t.muted=!0)}function ls(t){return F(t,"video")}function hs(t){return F(t,"iframe")&&(gn(t)||mn(t))}function gn(t){return!!t.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/)}function mn(t){return!!t.src.match(/vimeo\.com\/video\/.*/)}async function cs(t,e){await Fr(t),vn(t,e)}function vn(t,e){t.contentWindow.postMessage(JSON.stringify({event:"command",...e}),"*")}const us="_ukPlayer";let zr=0;function Fr(t){if(t[us])return t[us];const e=gn(t),i=mn(t),s=++zr;let n;return t[us]=new Promise(o=>{e&&z(t,"load",()=>{const r=()=>vn(t,{event:"listening",id:s});n=setInterval(r,100),r()}),z(window,"message",o,!1,({data:r})=>{try{return r=JSON.parse(r),e&&(r==null?void 0:r.id)===s&&r.event==="onReady"||i&&Number(r==null?void 0:r.player_id)===s}catch{}}),t.src=`${t.src}${v(t.src,"?")?"&":"?"}${e?"enablejsapi=1":`api=1&player_id=${s}`}`}).then(()=>clearInterval(n))}function Hr(t,e=0,i=0){return q(t)?ri(...Jt(t).map(s=>{const{top:n,left:o,bottom:r,right:a}=at(s);return{top:n-e,left:o-i,bottom:r+e,right:a+i}}).concat(T(t))):!1}function bn(t,{offset:e=0}={}){const i=q(t)?Xt(t,!1,["hidden"]):[];return i.reduce((r,a,l)=>{const{scrollTop:c,scrollHeight:u,offsetHeight:d}=a,f=at(a),p=u-f.height,{height:b,top:y}=i[l-1]?at(i[l-1]):T(t);let P=Math.ceil(y-f.top-e+c);return e>0&&dp?(e-=P-p,P=p):P<0&&(e-=P,P=0),()=>s(a,P-c,t,p).then(r)},()=>Promise.resolve())();function s(r,a,l,c){return new Promise(u=>{const d=r.scrollTop,f=n(Math.abs(a)),p=Date.now(),b=ps(r)===r,y=T(l).top+(b?0:d);let P=0,it=15;(function Tt(){const zt=o(K((Date.now()-p)/f));let bt=0;i[0]===r&&d+ah(r,"position")==="fixed");return~o&&(n=n.slice(o)),[s].concat(n.filter(r=>h(r,"overflow").split(" ").some(a=>v(["auto","scroll",...i],a))&&(!e||r.scrollHeight>at(r).height))).reverse()}function Bt(...t){return Xt(...t)[0]}function Jt(t){return Xt(t,!1,["hidden","clip"])}function at(t){const e=Lt(t),i=ps(t),s=!Pe(t)||t.contains(i);if(s&&e.visualViewport){let{height:l,width:c,scale:u,pageTop:d,pageLeft:f}=e.visualViewport;return l=Math.round(l*u),c=Math.round(c*u),{height:l,width:c,top:d,left:f,bottom:d+l,right:f+c}}let n=T(s?e:t);if(h(t,"display")==="inline")return n;const{body:o,documentElement:r}=e.document,a=s?i===r||i.clientHeight!a.contains(r)&&!fs(a,"static")))=f[u])continue;p=jr(t,e,i,l)[u]-s[u];const y=Wr(t,e[l],o,l);if(!ki(gs(s,p,l),y,l)){if(ki(s,y,l))continue;if(i.recursion)return!1;const P=Rr(t,e,i);if(P&&ki(P,y,1-l))return P;continue}}else if(r[l]==="shift"){const b=T(e[l]),{offset:y}=i;p=K(K(s[u],f[u],f[d]-s[c]),b[u]-s[c]+y[l],b[d]-y[l])-s[u]}a=gs(a,p,l)}return a}function yn(t,e,i){let{attach:s,offset:n}={attach:{element:["left","top"],target:["left","top"],...i.attach},offset:[0,0],...i},o=T(t);for(const[r,[a,,l,c]]of Object.entries(lt)){const u=s.target[r]===s.element[r]?at(e[r]):T(e[r]);o=gs(o,u[l]-o[l]+kn(s.target[r],c,u[a])-kn(s.element[r],c,o[a])+ +n[r],r)}return o}function gs(t,e,i){const[,s,n,o]=lt[i],r={...t};return r[n]=t[s]=t[n]+e,r[o]+=e,r}function kn(t,e,i){return t==="center"?i/2:t===e?i:0}function Lr(t,e,i,s,n){let o=In(...Sn(t,e).map(at));return i&&(o[lt[n][2]]+=i,o[lt[n][3]]-=i),s&&(o=In(o,T(J(s)?s[n]:s))),o}function Wr(t,e,i,s){const[n,o,r,a]=lt[s],[l]=Sn(t,e),c=at(l);return["auto","scroll"].includes(h(l,`overflow-${o}`))&&(c[r]-=l[`scroll${Ht(r)}`],c[a]=c[r]+l[`scroll${Ht(n)}`]),c[r]+=i,c[a]-=i,c}function Sn(t,e){return Jt(e).filter(i=>i.contains(t))}function In(...t){let e={};for(const i of t)for(const[,,s,n]of lt)e[s]=Math.max(e[s]||0,i[s]),e[n]=Math.min(...[e[n],i[n]].filter(Boolean));return e}function ki(t,e,i){const[,,s,n]=lt[i];return t[s]>=e[s]&&t[n]<=e[n]}function jr(t,e,{offset:i,attach:s},n){return yn(t,e,{attach:{element:En(s.element,n),target:En(s.target,n)},offset:qr(i,n)})}function Rr(t,e,i){return $n(t,e,{...i,attach:{element:i.attach.element.map(Tn).reverse(),target:i.attach.target.map(Tn).reverse()},offset:i.offset.reverse(),placement:i.placement.reverse(),recursion:!0})}function En(t,e){const i=[...t],s=lt[e].indexOf(t[e]);return~s&&(i[e]=lt[e][1-s%2+2]),i}function Tn(t){for(let e=0;edocument,handler(){document.hidden?this.stop():this.start()}},methods:{start(){this.stop(),this.update()},stop(){this.timer&&(clearInterval(this.timer),m(this.$el,"countdownstop"),this.timer=null)},update(){const t=Gr(this.date);t.total?this.timer||(this.started=!0,this.timer=setInterval(this.update,1e3),m(this.$el,"countdownstart")):(this.stop(),this.end||(m(this.$el,"countdownend"),this.end=!0,this.reload&&this.started&&window.location.reload()));for(const e of Vr){const i=x(this.clsWrapper.replace("%unit%",e),this.$el);if(!i)continue;let s=Math.trunc(t[e]).toString().padStart(2,"0");i.textContent!==s&&(s=s.split(""),s.length!==i.children.length&&vt(i,s.map(()=>"").join("")),s.forEach((n,o)=>i.children[o].textContent=n))}}}};function Gr(t){const e=Math.max(0,t-Date.now())/1e3;return{total:e,seconds:e%60,minutes:e/60%60,hours:e/60/60%24,days:e/60/60/24}}const V={};V.events=V.watch=V.observe=V.created=V.beforeConnect=V.connected=V.beforeDisconnect=V.disconnected=V.destroy=ms,V.args=function(t,e){return e!==!1&&ms(e||t)},V.update=function(t,e){return Vs(ms(t,ot(e)?{read:e}:e),"order")},V.props=function(t,e){if(J(e)){const i={};for(const s of e)i[s]=String;e=i}return V.methods(t,e)},V.computed=V.methods=function(t,e){return e?t?{...t,...e}:e:t},V.i18n=V.data=function(t,e,i){return i?Cn(t,e,i):e?t?function(s){return Cn(t,e,s)}:e:t};function Cn(t,e,i){return V.computed(ot(t)?t.call(i,i):t,ot(e)?e.call(i,i):e)}function ms(t,e){return t=t&&!J(t)?[t]:t,e?t?t.concat(e):J(e)?e:[e]:t}function Xr(t,e){return X(e)?t:e}function Ue(t,e,i){const s={};if(ot(e)&&(e=e.options),e.extends&&(t=Ue(t,e.extends,i)),e.mixins)for(const o of e.mixins)t=Ue(t,o,i);for(const o in t)n(o);for(const o in e)gt(t,o)||n(o);function n(o){s[o]=(V[o]||Xr)(t[o],e[o],i)}return s}function ve(t,e=[]){try{return t?wt(t,"{")?JSON.parse(t):e.length&&!v(t,":")?{[e[0]]:t}:t.split(";").reduce((i,s)=>{const[n,o]=s.split(/:(.*)/);return n&&!X(o)&&(i[n.trim()]=o.trim()),i},{}):{}}catch{return{}}}function vs(t,e){return t===Boolean?ji(e):t===Number?$t(e):t==="list"?Kr(e):t===Object&&H(e)?ve(e):t?t(e):e}const Jr=/,(?![^(]*\))/;function Kr(t){return J(t)?t:H(t)?t.split(Jr).map(e=>mt(e)?$t(e):ji(e.trim())):[t]}function Zr(t){t._data={},t._updates=[...t.$options.update||[]],t._disconnect.push(()=>t._updates=t._data=null)}function Qr(t,e){t._updates.unshift(e)}function Ve(t,e="update"){t._connected&&t._updates.length&&(t._queued||(t._queued=new Set,Dt.read(()=>{t._connected&&ta(t,t._queued),t._queued=null})),t._queued.add(e.type||e))}function ta(t,e){for(const{read:i,write:s,events:n=[]}of t._updates){if(!e.has("update")&&!n.some(r=>e.has(r)))continue;let o;i&&(o=i.call(t,t._data,e),o&&Te(o)&&ft(t._data,o)),s&&o!==!1&&Dt.write(()=>{t._connected&&s.call(t,t._data,e)})}}function dt(t){return Ge(qe,t,"resize")}function be(t){return Ge(dn,t)}function Si(t){return Ge(rs,t)}function Ii(t={}){return be({handler:function(e,i){const{targets:s=this.$el,preload:n=5}=t;for(const o of E(ot(s)?s(this):s))D('[loading="lazy"]',o).slice(0,n-1).forEach(r=>Oe(r,"loading"));for(const o of e.filter(({isIntersecting:r})=>r).map(({target:r})=>r))i.unobserve(o)},...t})}function bs(t){return Ge((e,i)=>os(i),t,"resize")}function Ye(t){return Ge((e,i)=>({disconnect:w(ia(e),"scroll",i,{passive:!0})}),t,"scroll")}function Pn(t){return{observe(e,i){return{observe:A,unobserve:A,disconnect:w(e,ut,i,{passive:!0})}},handler(e){if(!pt(e))return;const i=kt(e),s="tagName"in e.target?e.target:O(e.target);z(document,`${_t} ${hi} scroll`,n=>{const{x:o,y:r}=kt(n);(n.type!=="scroll"&&s&&o&&Math.abs(i.x-o)>100||r&&Math.abs(i.y-r)>100)&&setTimeout(()=>{m(s,"swipe"),m(s,`swipe${ea(i.x,i.y,o,r)}`)})})},...t}}function Ge(t,e,i){return{observe:t,handler(){Ve(this,i)},...e}}function ea(t,e,i,s){return Math.abs(t-i)>=Math.abs(e-s)?t-i>0?"Left":"Right":e-s>0?"Up":"Down"}function ia(t){return E(t).map(e=>{const{ownerDocument:i}=e,s=Bt(e,!0);return s===i.scrollingElement?i:s})}var _n={props:{margin:String,firstColumn:Boolean},data:{margin:"uk-margin-small-top",firstColumn:"uk-first-column"},observe:[Si({options:{childList:!0}}),Si({options:{attributes:!0,attributeFilter:["style"]}}),dt({handler(t){for(const{borderBoxSize:[{inlineSize:e,blockSize:i}]}of t)if(e||i){this.$emit("resize");return}},target:({$el:t})=>[t,...N(t)]})],update:{read(){return{rows:ws(N(this.$el))}},write({rows:t}){for(const e of t)for(const i of e)L(i,this.margin,t[0]!==e),L(i,this.firstColumn,e[U?e.length-1:0]===i)},events:["resize"]}};function ws(t){const e=[[]],i=t.some((s,n)=>n&&t[n-1].offsetParent!==s.offsetParent);for(const s of t){if(!q(s))continue;const n=xs(s,i);for(let o=e.length-1;o>=0;o--){const r=e[o];if(!r[0]){r.push(s);break}const a=xs(r[0],i);if(n.top>=a.bottom-1&&n.top!==a.top){e.push([s]);break}if(n.bottom-1>a.top||n.top===a.top){let l=r.length-1;for(;l>=0;l--){const c=xs(r[l],i);if(n.left>=c.left)break}r.splice(l+1,0,s);break}if(o===0){e.unshift([s]);break}}}return e}function xs(t,e=!1){let{offsetTop:i,offsetLeft:s,offsetHeight:n,offsetWidth:o}=t;return e&&([i,s]=je(t)),{top:i,left:s,bottom:i+n,right:s+o}}const $s="uk-transition-leave",ys="uk-transition-enter";function An(t,e,i,s=0){const n=ks(e,!0),o={opacity:1},r={opacity:0},a=()=>n===ks(e),l=d=>()=>a()?d():Promise.reject(),c=l(async()=>{I(e,$s),await(s?Promise.all(Mn(e).map(async(d,f)=>(await Ss(f*s),M.start(d,r,i/2,"ease")))):M.start(e,r,i/2,"ease")),_(e,$s)}),u=l(async()=>{const d=tt(e);I(e,ys),t(),h(s?N(e):e,r),tt(e,d),await Ss(),tt(e,"");const f=tt(e);h(e,"alignContent","flex-start"),tt(e,d);let p=[],b=i/2;if(s){const y=Mn(e);h(N(e),r),p=y.map(async(P,it)=>{await Ss(it*s),await M.start(P,o,i/2,"ease"),a()&&St(P,o)}),b+=y.length*s}if(!s||d!==f){const y={height:f,...s?{}:o};p.push(M.start(e,y,b,"ease"))}await Promise.all(p),_(e,ys),a()&&(St(e,{height:"",alignContent:"",...o}),delete e.dataset.transition)});return $(e,$s)?On(e).then(u):$(e,ys)?On(e).then(c).then(u):c().then(u)}function ks(t,e){return e&&(t.dataset.transition=1+ks(t)),$t(t.dataset.transition)||0}function On(t){return Promise.all(N(t).filter(M.inProgress).map(e=>new Promise(i=>z(e,"transitionend transitioncanceled",i))))}function Mn(t){return ws(N(t)).flat().filter(q)}function Ss(t){return new Promise(e=>setTimeout(e,t))}async function sa(t,e,i){await Nn();let s=N(e);const n=s.map(p=>Dn(p,!0)),o={...h(e,["height","padding"]),display:"block"},r=s.concat(e);await Promise.all(r.map(M.cancel)),h(r,"transitionProperty","none"),await t(),s=s.concat(N(e).filter(p=>!v(s,p))),await Promise.resolve(),h(r,"transitionProperty","");const a=k(e,"style"),l=h(e,["height","padding"]),[c,u]=na(e,s,n),d=s.map(p=>({style:k(p,"style")}));s.forEach((p,b)=>u[b]&&h(p,u[b])),h(e,o),m(e,"scroll"),await Nn();const f=s.map((p,b)=>O(p)===e&&M.start(p,c[b],i,"ease")).concat(M.start(e,l,i,"ease"));try{await Promise.all(f),s.forEach((p,b)=>{k(p,d[b]),O(p)===e&&h(p,"display",c[b].opacity===0?"none":"")}),k(e,"style",a)}catch{k(s,"style",""),St(e,o)}}function Dn(t,e){const i=h(t,"zIndex");return q(t)?{display:"",opacity:e?h(t,"opacity"):"0",pointerEvents:"none",position:"absolute",zIndex:i==="auto"?yt(t):i,...Bn(t)}:!1}function na(t,e,i){const s=e.map((o,r)=>O(o)&&r in i?i[r]?q(o)?Bn(o):{opacity:0}:{opacity:q(o)?1:0}:!1),n=s.map((o,r)=>{const a=O(e[r])===t&&(i[r]||Dn(e[r]));if(!a)return!1;if(!o)delete a.opacity;else if(!("opacity"in o)){const{opacity:l}=a;l%1?o.opacity=1:delete a.opacity}return a});return[s,n]}function Bn(t){const{height:e,width:i}=g(t);return{height:e,width:i,transform:"",...is(t),...h(t,["marginTop","marginLeft"])}}function Nn(){return new Promise(t=>requestAnimationFrame(t))}var zn={props:{duration:Number,animation:Boolean},data:{duration:150,animation:"slide"},methods:{animate(t,e=this.$el){const i=this.animation;return(i==="fade"?An:i==="delayed-fade"?(...n)=>An(...n,40):i?sa:()=>(t(),Promise.resolve()))(t,e,this.duration).catch(A)}}};function Et(t){t.target.closest('a[href="#"],a[href=""]')&&t.preventDefault()}const B={TAB:9,ESC:27,SPACE:32,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40};var oa={mixins:[zn],args:"target",props:{target:String,selActive:Boolean},data:{target:"",selActive:!1,attrItem:"uk-filter-control",cls:"uk-active",duration:250},computed:{children:({target:t},e)=>D(`${t} > *`,e),toggles:({attrItem:t},e)=>D(`[${t}],[data-${t}]`,e)},watch:{toggles(t){this.updateState();const e=D(this.selActive,this.$el);for(const i of t){this.selActive!==!1&&L(i,this.cls,v(e,i));const s=ca(i);F(s,"a")&&(s.role="button")}},children(t,e){e&&this.updateState()}},events:{name:"click keydown",delegate:({attrItem:t})=>`[${t}],[data-${t}]`,handler(t){t.type==="keydown"&&t.keyCode!==B.SPACE||t.target.closest("a,button")&&(Et(t),this.apply(t.current))}},methods:{apply(t){const e=this.getState(),i=Hn(t,this.attrItem,this.getState());ra(e,i)||this.setState(i)},getState(){return this.toggles.filter(t=>$(t,this.cls)).reduce((t,e)=>Hn(e,this.attrItem,t),{filter:{"":""},sort:[]})},async setState(t,e=!0){t={filter:{"":""},sort:[],...t},m(this.$el,"beforeFilter",[this,t]);for(const i of this.toggles)L(i,this.cls,la(i,this.attrItem,t));await Promise.all(D(this.target,this.$el).map(i=>{const s=()=>aa(t,i,N(i));return e?this.animate(s,i):s()})),m(this.$el,"afterFilter",[this])},updateState(){Dt.write(()=>this.setState(this.getState(),!1))}}};function Fn(t,e){return ve(Z(t,e),["filter"])}function ra(t,e){return["filter","sort"].every(i=>Ae(t[i],e[i]))}function aa(t,e,i){for(const o of i)h(o,"display",Object.values(t.filter).every(r=>!r||C(o,r))?"":"none");const[s,n]=t.sort;if(s){const o=ha(i,s,n);Ae(o,i)||W(e,o)}}function Hn(t,e,i){const{filter:s,group:n,sort:o,order:r="asc"}=Fn(t,e);return(s||X(o))&&(n?s?(delete i.filter[""],i.filter[n]=s):(delete i.filter[n],(ni(i.filter)||""in i.filter)&&(i.filter={"":s||""})):i.filter={"":s||""}),X(o)||(i.sort=[o,r]),i}function la(t,e,{filter:i={"":""},sort:[s,n]}){const{filter:o="",group:r="",sort:a,order:l="asc"}=Fn(t,e);return X(a)?r in i&&o===i[r]||!o&&r&&!(r in i)&&!i[""]:s===a&&n===l}function ha(t,e,i){return[...t].sort((s,n)=>Z(s,e).localeCompare(Z(n,e),void 0,{numeric:!0})*(i==="asc"||-1))}function ca(t){return x("a,button",t)||t}var ua={args:"dataSrc",props:{dataSrc:String,sources:String,margin:String,target:String,loading:String},data:{dataSrc:"",sources:!1,margin:"50%",target:!1,loading:"lazy"},connected(){this.loading!=="lazy"?this.load():Es(this.$el)&&(this.$el.loading="lazy",Is(this.$el))},disconnected(){this.img&&(this.img.onload=""),delete this.img},observe:be({handler(t,e){this.load(),e.disconnect()},options:({margin:t})=>({rootMargin:t}),filter:({loading:t})=>t==="lazy",target:({$el:t,$props:e})=>e.target?[t,...ze(e.target,t)]:t}),methods:{load(){if(this.img)return this.img;const t=Es(this.$el)?this.$el:fa(this.$el,this.dataSrc,this.sources);return Oe(t,"loading"),Is(this.$el,t.currentSrc),this.img=t}}};function Is(t,e){if(Es(t)){const i=O(t);(F(i,"picture")?N(i):[t]).forEach(n=>Ln(n,n))}else e&&!v(t.style.backgroundImage,e)&&(h(t,"backgroundImage",`url(${Xi(e)})`),m(t,pe("load",!1)))}const da=["data-src","data-srcset","sizes"];function Ln(t,e){for(const i of da){const s=Z(t,i);s&&k(e,i.replace(/data-/g,""),s)}}function fa(t,e,i){const s=new Image;return Wn(s,i),Ln(t,s),s.onload=()=>Is(t,s.currentSrc),s.src=e,s}function Wn(t,e){if(e=pa(e),e.length){const i=It("");for(const s of e){const n=It("");k(n,s),W(i,n)}W(i,t)}}function pa(t){if(!t)return[];if(wt(t,"["))try{t=JSON.parse(t)}catch{t=[]}else t=ve(t);return J(t)||(t=[t]),t.filter(e=>!ni(e))}function Es(t){return F(t,"img")}let Ts;function jn(t){const e=w(t,"touchstart",n=>{if(n.targetTouches.length!==1||C(n.target,'input[type="range"'))return;let o=kt(n).y;const r=w(t,"touchmove",a=>{const l=kt(a).y;l!==o&&(o=l,Xt(a.target).some(c=>{if(!t.contains(c))return!1;let{scrollHeight:u,clientHeight:d}=c;return d{Ts=!1,e(),St(i,s)}}var Xe={props:{container:Boolean},data:{container:!0},computed:{container({container:t}){return t===!0&&this.$container||t&&x(t)}}},Rn={props:{pos:String,offset:Boolean,flip:Boolean,shift:Boolean,inset:Boolean},data:{pos:`bottom-${U?"right":"left"}`,offset:!1,flip:!0,shift:!0,inset:!1},connected(){this.pos=this.$props.pos.split("-").concat("center").slice(0,2),[this.dir,this.align]=this.pos,this.axis=v(["top","bottom"],this.dir)?"y":"x"},methods:{positionAt(t,e,i){let s=[this.getPositionOffset(t),this.getShiftOffset(t)];const n=[this.flip&&"flip",this.shift&&"shift"],o={element:[this.inset?this.dir:bi(this.dir),this.align],target:[this.dir,this.align]};if(this.axis==="y"){for(const l in o)o[l].reverse();s.reverse(),n.reverse()}const r=Cs(t),a=g(t);h(t,{top:-a.height,left:-a.width}),xn(t,e,{attach:o,offset:s,boundary:i,placement:n,viewportOffset:this.getViewportOffset(t)}),r()},getPositionOffset(t=this.$el){return G(this.offset===!1?h(t,"--uk-position-offset"):this.offset,this.axis==="x"?"width":"height",t)*(v(["left","top"],this.dir)?-1:1)*(this.inset?-1:1)},getShiftOffset(t=this.$el){return this.align==="center"?0:G(h(t,"--uk-position-shift-offset"),this.axis==="y"?"width":"height",t)*(v(["left","top"],this.align)?1:-1)},getViewportOffset(t){return G(h(t,"--uk-position-viewport-offset"))}}};function Cs(t){const e=Bt(t),{scrollTop:i}=e;return()=>{i!==e.scrollTop&&(e.scrollTop=i)}}var Kt={props:{cls:Boolean,animation:"list",duration:Number,velocity:Number,origin:String,transition:String},data:{cls:!1,animation:[!1],duration:200,velocity:.2,origin:!1,transition:"ease",clsEnter:"uk-togglable-enter",clsLeave:"uk-togglable-leave"},computed:{hasAnimation:({animation:t})=>!!t[0],hasTransition:({animation:t})=>["slide","reveal"].some(e=>wt(t[0],e))},methods:{async toggleElement(t,e,i){try{return await Promise.all(E(t).map(s=>{const n=le(e)?e:!this.isToggled(s);if(!m(s,`before${n?"show":"hide"}`,[this]))return Promise.reject();const o=(ot(i)?i:i===!1||!this.hasAnimation?ga:this.hasTransition?ma:va)(s,n,this),r=n?this.clsEnter:this.clsLeave;I(s,r),m(s,n?"show":"hide",[this]);const a=()=>{var l;if(_(s,r),m(s,n?"shown":"hidden",[this]),n){const c=Cs(s);(l=D("[autofocus]",s).find(q))==null||l.focus(),c()}};return o?o.then(a,()=>(_(s,r),Promise.reject())):a()})),!0}catch{return!1}},isToggled(t=this.$el){return t=R(t),$(t,this.clsEnter)?!0:$(t,this.clsLeave)?!1:this.cls?$(t,this.cls.split(" ")[0]):q(t)},_toggle(t,e){if(!t)return;e=!!e;let i;this.cls?(i=v(this.cls," ")||e!==$(t,this.cls),i&&L(t,this.cls,v(this.cls," ")?void 0:e)):(i=e===t.hidden,i&&(t.hidden=!e)),i&&m(t,"toggled",[e,this])}}};function ga(t,e,{_toggle:i}){return Ot.cancel(t),M.cancel(t),i(t,e)}async function ma(t,e,{animation:i,duration:s,velocity:n,transition:o,_toggle:r}){var a;const[l="reveal",c="top"]=((a=i[0])==null?void 0:a.split("-"))||[],u=[["left","right"],["top","bottom"]],d=u[v(u[0],c)?0:1],f=d[1]===c,b=["width","height"][u.indexOf(d)],y=`margin-${d[0]}`,P=`margin-${c}`;let it=g(t)[b];const Tt=M.inProgress(t);await M.cancel(t),e&&r(t,!0);const zt=Object.fromEntries(["padding","border","width","height","minWidth","minHeight","overflowY","overflowX",y,P].map(ar=>[ar,t.style[ar]])),bt=g(t),Us=S(h(t,y)),nr=S(h(t,P)),ne=bt[b]+nr;!Tt&&!e&&(it+=nr);const[Li]=es(t,"
        ");h(Li,{boxSizing:"border-box",height:bt.height,width:bt.width,...h(t,["overflow","padding","borderTop","borderRight","borderBottom","borderLeft","borderImage",P])}),h(t,{padding:0,border:0,minWidth:0,minHeight:0,[P]:0,width:bt.width,height:bt.height,overflow:"hidden",[b]:it});const or=it/ne;s=(n*ne+s)*(e?1-or:or);const rr={[b]:e?ne:0};f&&(h(t,y,ne-it+Us),rr[y]=e?Us:ne+Us),!f^l==="reveal"&&(h(Li,y,-ne+it),M.start(Li,{[y]:e?0:-ne},s,o));try{await M.start(t,rr,s,o)}finally{h(t,zt),We(Li.firstChild),e||r(t,!1)}}function va(t,e,i){const{animation:s,duration:n,_toggle:o}=i;return e?(o(t,!0),Ot.in(t,s[0],n,i.origin)):Ot.out(t,s[1]||s[0],n,i.origin).then(()=>o(t,!1))}const nt=[];var Ps={mixins:[st,Xe,Kt],props:{selPanel:String,selClose:String,escClose:Boolean,bgClose:Boolean,stack:Boolean,role:String},data:{cls:"uk-open",escClose:!0,bgClose:!0,overlay:!0,stack:!1,role:"dialog"},computed:{panel:({selPanel:t},e)=>x(t,e),transitionElement(){return this.panel}},connected(){const t=this.panel||this.$el;t.role=this.role,this.overlay&&(t.ariaModal=!0)},beforeDisconnect(){v(nt,this)&&this.toggleElement(this.$el,!1,!1)},events:[{name:"click",delegate:({selClose:t})=>`${t},a[href*="#"]`,handler(t){const{current:e,defaultPrevented:i}=t,{hash:s}=e;!i&&s&&Vt(e)&&!this.$el.contains(x(s))?this.hide():C(e,this.selClose)&&(Et(t),this.hide())}},{name:"toggle",self:!0,handler(t,e){t.defaultPrevented||(t.preventDefault(),this.target=e==null?void 0:e.$el,this.isToggled()===v(nt,this)&&this.toggle())}},{name:"beforeshow",self:!0,handler(t){if(v(nt,this))return!1;!this.stack&&nt.length?(Promise.all(nt.map(e=>e.hide())).then(this.show),t.preventDefault()):nt.push(this)}},{name:"show",self:!0,handler(){this.stack&&h(this.$el,"zIndex",S(h(this.$el,"zIndex"))+nt.length);const t=[this.overlay&&wa(this),this.overlay&&jn(this.$el),this.bgClose&&xa(this),this.escClose&&$a(this)];z(this.$el,"hidden",()=>t.forEach(e=>e&&e()),{self:!0}),I(document.documentElement,this.clsPage),Un(this.target,!0)}},{name:"shown",self:!0,handler(){Be(this.$el)||(this.$el.tabIndex=-1),C(this.$el,":focus-within")||this.$el.focus()}},{name:"hidden",self:!0,handler(){v(nt,this)&&nt.splice(nt.indexOf(this),1),h(this.$el,"zIndex","");const{target:t}=this;nt.some(e=>e.clsPage===this.clsPage)||(_(document.documentElement,this.clsPage),queueMicrotask(()=>Be(t)&&t.focus())),Un(t,!1),this.target=null}}],methods:{toggle(){return this.isToggled()?this.hide():this.show()},show(){return this.container&&O(this.$el)!==this.container?(W(this.container,this.$el),new Promise(t=>requestAnimationFrame(()=>this.show().then(t)))):this.toggleElement(this.$el,!0,qn)},hide(){return this.toggleElement(this.$el,!1,qn)}}};function qn(t,e,{transitionElement:i,_toggle:s}){return new Promise((n,o)=>z(t,"show hide",()=>{var r;(r=t._reject)==null||r.call(t),t._reject=o,s(t,e);const a=z(i,"transitionstart",()=>{z(i,"transitionend transitioncancel",n,{self:!0}),clearTimeout(l)},{self:!0}),l=setTimeout(()=>{a(),n()},ba(h(i,"transitionDuration")))})).then(()=>delete t._reject)}function ba(t){return t?oe(t,"ms")?S(t):S(t)*1e3:0}function wa(t){return w(document,"focusin",e=>{Wt(nt)===t&&!t.$el.contains(e.target)&&t.$el.focus()})}function xa(t){return w(document,ut,({target:e})=>{Wt(nt)!==t||t.overlay&&!t.$el.contains(e)||!t.panel||t.panel.contains(e)||z(document,`${_t} ${hi} scroll`,({defaultPrevented:i,type:s,target:n})=>{!i&&s===_t&&e===n&&t.hide()},!0)})}function $a(t){return w(document,"keydown",e=>{e.keyCode===27&&Wt(nt)===t&&t.hide()})}function Un(t,e){t!=null&&t.ariaExpanded&&(t.ariaExpanded=e)}var _s={slide:{show(t){return[{transform:j(t*-100)},{transform:j()}]},percent(t){return Je(t)},translate(t,e){return[{transform:j(e*-100*t)},{transform:j(e*100*(1-t))}]}}};function Je(t){return Math.abs(new DOMMatrix(h(t,"transform")).m41/t.offsetWidth)}function j(t=0,e="%"){return t?`translate3d(${t+e}, 0, 0)`:""}function ya(t,e,i,{animation:s,easing:n}){const{percent:o,translate:r,show:a=A}=s,l=a(i),{promise:c,resolve:u}=Vn();return{dir:i,show(d,f=0,p){const b=p?"linear":n;return d-=Math.round(d*K(f,-1,1)),this.translate(f),Zt(e,"itemin",{percent:f,duration:d,timing:b,dir:i}),Zt(t,"itemout",{percent:1-f,duration:d,timing:b,dir:i}),Promise.all([M.start(e,l[1],d,b),M.start(t,l[0],d,b)]).then(()=>{this.reset(),u()},A),c},cancel(){return M.cancel([e,t])},reset(){St([e,t],l[0])},async forward(d,f=this.percent()){return await this.cancel(),this.show(d,f,!0)},translate(d){this.reset();const f=r(d,i);h(e,f[1]),h(t,f[0]),Zt(e,"itemtranslatein",{percent:d,dir:i}),Zt(t,"itemtranslateout",{percent:1-d,dir:i})},percent(){return o(t||e,e,i)},getDistance(){return t==null?void 0:t.offsetWidth}}}function Zt(t,e,i){m(t,pe(e,!1,!1,i))}function Vn(){let t;return{promise:new Promise(e=>t=e),resolve:t}}var Ei={props:{i18n:Object},data:{i18n:null},methods:{t(t,...e){var i,s,n;let o=0;return((n=((i=this.i18n)==null?void 0:i[t])||((s=this.$options.i18n)==null?void 0:s[t]))==null?void 0:n.replace(/%s/g,()=>e[o++]||""))||""}}},ka={props:{autoplay:Boolean,autoplayInterval:Number,pauseOnHover:Boolean},data:{autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},connected(){k(this.list,"aria-live",this.autoplay?"off":"polite"),this.autoplay&&this.startAutoplay()},disconnected(){this.stopAutoplay()},update(){k(this.slides,"tabindex","-1")},events:[{name:"visibilitychange",el:()=>document,filter:({autoplay:t})=>t,handler(){document.hidden?this.stopAutoplay():this.startAutoplay()}}],methods:{startAutoplay(){this.stopAutoplay(),this.interval=setInterval(()=>{this.stack.length||this.draggable&&C(this.$el,":focus-within")&&!C(this.$el,":focus")||this.pauseOnHover&&C(this.$el,":hover")||this.show("next")},this.autoplayInterval)},stopAutoplay(){clearInterval(this.interval)}}};const Ti={passive:!1,capture:!0},Yn={passive:!0,capture:!0},Sa="touchstart mousedown",As="touchmove mousemove",Gn="touchend touchcancel mouseup click input scroll";var Ia={props:{draggable:Boolean},data:{draggable:!0,threshold:10},created(){for(const t of["start","move","end"]){const e=this[t];this[t]=i=>{const s=kt(i).x*(U?-1:1);this.prevPos=s===this.pos?this.prevPos:this.pos,this.pos=s,e(i)}}},events:[{name:Sa,passive:!0,delegate:({selList:t})=>`${t} > *`,handler(t){!this.draggable||this.parallax||!pt(t)&&Ea(t.target)||t.target.closest(De)||t.button>0||this.length<2||this.start(t)}},{name:"dragstart",handler(t){t.preventDefault()}},{name:As,el:({list:t})=>t,handler:A,...Ti}],methods:{start(){this.drag=this.pos,this._transitioner?(this.percent=this._transitioner.percent(),this.drag+=this._transitioner.getDistance()*this.percent*this.dir,this._transitioner.cancel(),this._transitioner.translate(this.percent),this.dragging=!0,this.stack=[]):this.prevIndex=this.index,w(document,As,this.move,Ti),w(document,Gn,this.end,Yn),h(this.list,"userSelect","none")},move(t){const e=this.pos-this.drag;if(e===0||this.prevPos===this.pos||!this.dragging&&Math.abs(e)r;)this.drag-=r*this.dir,s=o,n-=r,o=this.getIndex(s+this.dir),r=Xn.call(this,s,o);this.percent=n/r;const a=i[s],l=i[o],c=this.index!==o,u=s===o;let d;for(const f of[this.index,this.prevIndex])v([o,s],f)||(m(i[f],"itemhidden",[this]),u&&(d=!0,this.prevIndex=s));(this.index===s&&this.prevIndex!==s||d)&&m(i[this.index],"itemshown",[this]),c&&(this.prevIndex=s,this.index=o,u||(m(a,"beforeitemhide",[this]),m(a,"itemhide",[this])),m(l,"beforeitemshow",[this]),m(l,"itemshow",[this])),this._transitioner=this._translate(Math.abs(this.percent),a,!u&&l)},end(){if(Yt(document,As,this.move,Ti),Yt(document,Gn,this.end,Yn),this.dragging)if(setTimeout(w(this.list,"click",t=>t.preventDefault(),Ti)),this.dragging=null,this.index===this.prevIndex)this.percent=1-this.percent,this.dir*=-1,this._show(!1,this.index,!0),this._transitioner=null;else{const t=(U?this.dir*(U?1:-1):this.dir)<0==this.prevPos>this.pos;this.index=t?this.index:this.prevIndex,t&&(m(this.slides[this.prevIndex],"itemhidden",[this]),m(this.slides[this.index],"itemshown",[this]),this.percent=1-this.percent),this.show(this.dir>0&&!t||this.dir<0&&t?"next":"previous",!0)}h(this.list,{userSelect:""}),this.drag=this.percent=null}}};function Xn(t,e){return this._getTransitioner(t,t!==e&&e).getDistance()||this.slides[t].offsetWidth}function Ea(t){return h(t,"userSelect")!=="none"&&re(t.childNodes).some(e=>e.nodeType===3&&e.textContent.trim())}function Ta(t){t._watches=[];for(const e of t.$options.watch||[])for(const[i,s]of Object.entries(e))Jn(t,s,i);t._initial=!0}function Jn(t,e,i){t._watches.push({name:i,...Te(e)?e:{handler:e}})}function Ca(t,e){for(const{name:i,handler:s,immediate:n=!0}of t._watches)(t._initial&&n||gt(e,i)&&!Ae(e[i],t[i]))&&s.call(t,t[i],e[i]);t._initial=!1}function Pa(t){const{computed:e}=t.$options;if(t._computed={},e)for(const i in e)Zn(t,i,e[i])}const Kn={subtree:!0,childList:!0};function Zn(t,e,i){t._hasComputed=!0,Object.defineProperty(t,e,{enumerable:!0,get(){const{_computed:s,$props:n,$el:o}=t;if(!gt(s,e)&&(s[e]=(i.get||i).call(t,n,o),i.observe&&t._computedObserver)){const r=i.observe.call(t,n);t._computedObserver.observe(["~","+","-"].includes(r[0])?o.parentElement:o.getRootNode(),Kn)}return s[e]},set(s){const{_computed:n}=t;n[e]=i.set?i.set.call(t,s):s,X(n[e])&&delete n[e]}})}function _a(t){t._hasComputed&&(Qr(t,{read:()=>Ca(t,Qn(t)),events:["resize","computed"]}),t._computedObserver=rs(t.$el,()=>Ve(t,"computed"),Kn),t._disconnect.push(()=>{t._computedObserver.disconnect(),t._computedObserver=null,Qn(t)}))}function Qn(t){const e={...t._computed};return t._computed={},e}function Aa(t){for(const e of t.$options.events||[])if(gt(e,"handler"))to(t,e);else for(const i in e)to(t,{name:i,handler:e[i]})}function to(t,{name:e,el:i,handler:s,capture:n,passive:o,delegate:r,filter:a,self:l}){a&&!a.call(t,t)||t._disconnect.push(w(i?i.call(t,t):t.$el,e,r==null?void 0:r.call(t,t),s.bind(t),{passive:o,capture:n,self:l}))}function Oa(t){for(const e of t.$options.observe||[])Ma(t,e)}function Ma(t,e){let{observe:i,target:s=t.$el,handler:n,options:o,filter:r,args:a}=e;if(r&&!r.call(t,t))return;const l=`_observe${t._disconnect.length}`;ot(s)&&!gt(t,l)&&Zn(t,l,()=>{const d=s.call(t,t);return J(d)?E(d):d}),n=H(n)?t[n]:n.bind(t),ot(o)&&(o=o.call(t,t));const c=gt(t,l)?t[l]:s,u=i(c,n,o,a);ot(s)&&J(t[l])&&Jn(t,{handler:Da(u,o),immediate:!1},l),t._disconnect.push(()=>u.disconnect())}function Da(t,e){return(i,s)=>{for(const n of s)v(i,n)||(t.unobserve?t.unobserve(n):t.observe&&t.disconnect());for(const n of i)(!v(s,n)||!t.unobserve)&&t.observe(n,e)}}function Ba(t){const{$options:e,$props:i}=t,s=eo(e);ft(i,s);const{computed:n,methods:o}=e;for(let r in i)r in s&&(!n||!gt(n,r))&&(!o||!gt(o,r))&&(t[r]=i[r])}function eo(t){const e={},{args:i=[],props:s={},el:n,id:o}=t;if(!s)return e;for(const a in s){const l=Ft(a);let c=Z(n,l);X(c)||(c=s[a]===Boolean&&c===""?!0:vs(s[a],c),!(l==="target"&&wt(c,"_"))&&(e[a]=c))}const r=ve(Z(n,o),i);for(const a in r){const l=Ee(a);X(s[l])||(e[l]=vs(s[l],r[a]))}return e}const Na=ct((t,e)=>{const i=Object.keys(e),s=i.concat(t).map(n=>[Ft(n),`data-${Ft(n)}`]).flat();return{attributes:i,filter:s}});function za(t){const{$options:e,$props:i}=t,{id:s,props:n,el:o}=e;if(!n)return;const{attributes:r,filter:a}=Na(s,n),l=new MutationObserver(c=>{const u=eo(e);c.some(({attributeName:d})=>{const f=d.replace("data-","");return(f===s?r:[Ee(f),Ee(d)]).some(p=>!X(u[p])&&u[p]!==i[p])})&&t.$reset()});l.observe(o,{attributes:!0,attributeFilter:a}),t._disconnect.push(()=>l.disconnect())}function we(t,e){var i;(i=t.$options[e])==null||i.forEach(s=>s.call(t))}function Os(t){t._connected||(Ba(t),we(t,"beforeConnect"),t._connected=!0,t._disconnect=[],Aa(t),Zr(t),Ta(t),Oa(t),za(t),_a(t),we(t,"connected"),Ve(t))}function Ms(t){t._connected&&(we(t,"beforeDisconnect"),t._disconnect.forEach(e=>e()),t._disconnect=null,we(t,"disconnected"),t._connected=!1)}let Fa=0;function io(t,e={}){e.data=Wa(e,t.constructor.options),t.$options=Ue(t.constructor.options,e,t),t.$props={},t._uid=Fa++,Ha(t),La(t),Pa(t),we(t,"created"),e.el&&t.$mount(e.el)}function Ha(t){const{data:e={}}=t.$options;for(const i in e)t.$props[i]=t[i]=e[i]}function La(t){const{methods:e}=t.$options;if(e)for(const i in e)t[i]=e[i].bind(t)}function Wa({data:t={}},{args:e=[],props:i={}}){J(t)&&(t=t.slice(0,e.length).reduce((s,n,o)=>(Te(n)?ft(s,n):s[e[o]]=n,s),{}));for(const s in t)X(t[s])?delete t[s]:i[s]&&(t[s]=vs(i[s],t[s]));return t}const ht=function(t){io(this,t)};ht.util=Ur,ht.options={},ht.version="3.23.12";const ja="uk-",Qt="__uikit__",xe={};function so(t,e){var i,s;const n=ja+Ft(t);if(!e)return xe[n].options||(xe[n]=ht.extend(xe[n])),xe[n];t=Ee(t),ht[t]=(r,a)=>Ke(t,r,a);const o=(i=e.options)!=null?i:{...e};return o.id=n,o.name=t,(s=o.install)==null||s.call(o,ht,o,t),ht._initialized&&!o.functional&&requestAnimationFrame(()=>Ke(t,`[${n}],[data-${n}]`)),xe[n]=o}function Ke(t,e,i,...s){const n=so(t);return n.options.functional?new n({data:Te(e)?e:[e,i,...s]}):e?D(e).map(o)[0]:o();function o(r){const a=Ci(r,t);if(a)if(i)a.$destroy();else return a;return new n({el:r,data:i})}}function Ze(t){return(t==null?void 0:t[Qt])||{}}function Ci(t,e){return Ze(t)[e]}function Ra(t,e){t[Qt]||(t[Qt]={}),t[Qt][e.$options.name]=e}function qa(t,e){var i;(i=t[Qt])==null||delete i[e.$options.name],ni(t[Qt])&&delete t[Qt]}function Ua(t){t.component=so,t.getComponents=Ze,t.getComponent=Ci,t.update=no,t.use=function(i){if(!i.installed)return i.call(null,this),i.installed=!0,this},t.mixin=function(i,s){s=(H(s)?this.component(s):s)||this,s.options=Ue(s.options,i)},t.extend=function(i){i||(i={});const s=this,n=function(r){io(this,r)};return n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.options=Ue(s.options,i),n.super=s,n.extend=s.extend,n};let e;Object.defineProperty(t,"container",{get(){return e||document.body},set(i){e=x(i)}})}function no(t,e){t=t?R(t):document.body;for(const i of fe(t).reverse())oo(i,e);Mt(t,i=>oo(i,e))}function oo(t,e){const i=Ze(t);for(const s in i)Ve(i[s],e)}function Va(t){t.prototype.$mount=function(e){const i=this;Ra(e,i),i.$options.el=e,e.isConnected&&Os(i)},t.prototype.$destroy=function(e=!1){const i=this,{el:s}=i.$options;s&&Ms(i),we(i,"destroy"),qa(s,i),e&&Q(i.$el)},t.prototype.$create=Ke,t.prototype.$emit=function(e){Ve(this,e)},t.prototype.$update=function(e=this.$el,i){no(e,i)},t.prototype.$reset=function(){Ms(this),Os(this)},t.prototype.$getComponent=Ci,Object.defineProperties(t.prototype,{$el:{get(){return this.$options.el}},$container:Object.getOwnPropertyDescriptor(t,"container")})}let Ya=1;function te(t,e=null){return(e==null?void 0:e.id)||`${t.$options.id}-${Ya++}`}var Ga={i18n:{next:"Next slide",previous:"Previous slide",slideX:"Slide %s",slideLabel:"%s of %s",role:"String"},data:{selNav:!1,role:"region"},computed:{nav:({selNav:t},e)=>x(t,e),navChildren(){return N(this.nav)},selNavItem:({attrItem:t})=>`[${t}],[data-${t}]`,navItems(t,e){return D(this.selNavItem,e)}},watch:{nav(t,e){k(t,"role","tablist"),this.padNavitems(),e&&this.$emit()},list(t){F(t,"ul")&&k(t,"role","presentation")},navChildren(t){k(t,"role","presentation"),this.padNavitems(),this.updateNav()},navItems(t){for(const e of t){const i=Z(e,this.attrItem),s=x("a,button",e)||e;let n,o=null;if(mt(i)){const r=$t(i),a=this.slides[r];a&&(a.id||(a.id=te(this,a)),o=a.id),n=this.t("slideX",S(i)+1),s.role="tab"}else this.list&&(this.list.id||(this.list.id=te(this,this.list)),o=this.list.id),n=this.t(i);s.ariaControls=o,s.ariaLabel=s.ariaLabel||n}},slides(t){t.forEach((e,i)=>k(e,{role:this.nav?"tabpanel":"group","aria-label":this.t("slideLabel",i+1,this.length),"aria-roledescription":this.nav?null:"slide"})),this.padNavitems()}},connected(){this.$el.role=this.role,this.$el.ariaRoleDescription="carousel"},update:[{write(){this.navItems.concat(this.nav).forEach(t=>t&&(t.hidden=!this.maxIndex)),this.updateNav()},events:["resize"]}],events:[{name:"click keydown",delegate:({selNavItem:t})=>t,filter:({parallax:t})=>!t,handler(t){t.target.closest("a,button")&&(t.type==="click"||t.keyCode===B.SPACE)&&(Et(t),this.show(Z(t.current,this.attrItem)))}},{name:"itemshow",handler(){this.updateNav()}},{name:"keydown",delegate:({selNavItem:t})=>t,filter:({parallax:t})=>!t,handler(t){const{current:e,keyCode:i}=t,s=Z(e,this.attrItem);if(!mt(s))return;let n=i===B.HOME?0:i===B.END?"last":i===B.LEFT?"previous":i===B.RIGHT?"next":-1;~n&&(t.preventDefault(),this.show(n))}}],methods:{updateNav(){const t=this.getValidIndex();for(const e of this.navItems){const i=Z(e,this.attrItem),s=x("a,button",e)||e;if(mt(i)){const o=$t(i)===t;L(e,this.clsActive,o),L(s,"uk-disabled",!!this.parallax),s.ariaSelected=o,s.tabIndex=o&&!this.parallax?null:-1,o&&s&&C(O(e),":focus-within")&&s.focus()}else L(e,"uk-invisible",this.finite&&(i==="previous"&&t===0||i==="next"&&t>=this.maxIndex))}},padNavitems(){if(!this.nav)return;const t=[];for(let e=0;es.matches(`[${i}]`))||x(`
      • `)}Ae(t,this.navChildren)||vt(this.nav,t)}}};const Xa="cubic-bezier(0.25, 0.46, 0.45, 0.94)",Ja="cubic-bezier(0.165, 0.84, 0.44, 1)";var ro={mixins:[ka,Ia,Ga,Ei],props:{clsActivated:String,easing:String,index:Number,finite:Boolean,velocity:Number},data:()=>({easing:"ease",finite:!1,velocity:1,index:0,prevIndex:-1,stack:[],percent:0,clsActive:"uk-active",clsActivated:"",clsEnter:"uk-slide-enter",clsLeave:"uk-slide-leave",clsSlideActive:"uk-slide-active",Transitioner:!1,transitionOptions:{}}),connected(){this.prevIndex=-1,this.index=this.getValidIndex(this.$props.index),this.stack=[]},disconnected(){_(this.slides,this.clsActive)},computed:{duration:({velocity:t},e)=>ao(e.offsetWidth/t),list:({selList:t},e)=>x(t,e),maxIndex(){return this.length-1},slides(){return N(this.list)},length(){return this.slides.length}},watch:{slides(t,e){e&&this.$emit()}},events:{itemshow({target:t}){I(t,this.clsEnter,this.clsSlideActive)},itemshown({target:t}){_(t,this.clsEnter)},itemhide({target:t}){I(t,this.clsLeave)},itemhidden({target:t}){_(t,this.clsLeave,this.clsSlideActive)}},methods:{async show(t,e=!1){var i;if(this.dragging||!this.length||this.parallax)return;const{stack:s}=this,n=e?0:s.length,o=()=>{s.splice(n,1),s.length&&this.show(s.shift(),!0)};if(s[e?"unshift":"push"](t),!e&&s.length>1){s.length===2&&((i=this._transitioner)==null||i.forward(Math.min(this.duration,200)));return}const r=this.getIndex(this.index),a=$(this.slides,this.clsActive)&&this.slides[r],l=this.getIndex(t,this.index),c=this.slides[l];if(a===c){o();return}if(this.dir=Ka(t,r),this.prevIndex=r,this.index=l,a&&!m(a,"beforeitemhide",[this])||!m(c,"beforeitemshow",[this,a])){this.index=this.prevIndex,o();return}a&&m(a,"itemhide",[this]),m(c,"itemshow",[this]),await this._show(a,c,e),a&&m(a,"itemhidden",[this]),m(c,"itemshown",[this]),s.shift(),this._transitioner=null,s.length&&requestAnimationFrame(()=>s.length&&this.show(s.shift(),!0))},getIndex(t=this.index,e=this.index){return K(rt(t,this.slides,e,this.finite),0,Math.max(0,this.maxIndex))},getValidIndex(t=this.index,e=this.prevIndex){return this.getIndex(t,e)},async _show(t,e,i){if(this._transitioner=this._getTransitioner(t,e,this.dir,{easing:i?e.offsetWidth<600?Xa:Ja:this.easing,...this.transitionOptions}),!i&&!t){this._translate(1);return}const{length:s}=this.stack;return this._transitioner[s>1?"forward":"show"](s>1?Math.min(this.duration,75+75/(s-1)):this.duration,this.percent)},_translate(t,e=this.prevIndex,i=this.index){const s=this._getTransitioner(e===i?!1:e,i);return s.translate(t),s},_getTransitioner(t=this.prevIndex,e=this.index,i=this.dir||1,s=this.transitionOptions){return new this.Transitioner(_e(t)?this.slides[t]:t,_e(e)?this.slides[e]:e,i*(U?-1:1),s)}}};function Ka(t,e){return t==="next"?1:t==="previous"||t0?1-Je(e):Je(t)},translate(t,e){return e<0?[{transform:j(t*100),zIndex:0},{transform:j(-30*(1-t)),zIndex:-1}]:[{transform:j(-30*t),zIndex:-1},{transform:j(100*(1-t)),zIndex:0}]}}};function $e(t){return`scale3d(${t}, ${t}, 1)`}var ho={..._s,fade:{show(){return[{opacity:0},{opacity:1}]},percent(t){return 1-h(t,"opacity")},translate(t){return[{opacity:1-t},{opacity:t}]}},scale:{show(){return[{opacity:0,transform:$e(1-.2)},{opacity:1,transform:$e(1)}]},percent(t){return 1-h(t,"opacity")},translate(t){return[{opacity:1-t,transform:$e(1-.2*t)},{opacity:t,transform:$e(1-.2+.2*t)}]}}},co={i18n:{counter:"%s / %s"},mixins:[Ps,lo],functional:!0,props:{counter:Boolean,preload:Number,nav:Boolean,slidenav:Boolean,delayControls:Number,videoAutoplay:Boolean,template:String},data:()=>({counter:!1,preload:1,nav:!1,slidenav:!0,delayControls:3e3,videoAutoplay:!1,items:[],cls:"uk-open",clsPage:"uk-lightbox-page",clsFit:"uk-lightbox-items-fit",clsZoom:"uk-lightbox-zoom",attrItem:"uk-lightbox-item",selList:".uk-lightbox-items",selClose:".uk-close-large",selNav:".uk-lightbox-thumbnav, .uk-lightbox-dotnav",selCaption:".uk-lightbox-caption",selCounter:".uk-lightbox-counter",pauseOnHover:!1,velocity:2,Animations:ho,template:'
            '}),created(){let t=x(this.template);F(t,"template")&&(t=It(vt(t)));const e=x(this.selList,t),i=this.$props.nav;Q(D(this.selNav,t).filter(o=>!C(o,`.uk-${i}`)));for(const[o,r]of this.items.entries())W(e,"
            "),i==="thumbnav"&&Le(Qa(r,this.videoAutoplay),W(x(this.selNav,t),`
          • `));this.slidenav||Q(D(".uk-lightbox-slidenav",t)),this.counter||Q(x(this.selCounter,t)),I(e,this.clsFit);const s=x("[uk-close]",t),n=this.t("close");s&&n&&(s.dataset.i18n=JSON.stringify({label:n})),this.$mount(W(this.container,t))},events:[{name:"click",self:!0,filter:({bgClose:t})=>t,delegate:({selList:t})=>`${t} > *`,handler(t){t.defaultPrevented||this.hide()}},{name:"click",self:!0,delegate:({clsZoom:t})=>`.${t}`,handler(t){t.defaultPrevented||L(this.list,this.clsFit)}},{name:`${Me} ${ut} keydown`,filter:({delayControls:t})=>t,handler(){this.showControls()}},{name:"shown",self:!0,handler(){this.showControls()}},{name:"hide",self:!0,handler(){this.hideControls(),_(this.slides,this.clsActive),M.stop(this.slides)}},{name:"hidden",self:!0,handler(){this.$destroy(!0)}},{name:"keyup",el:()=>document,handler({keyCode:t}){if(!this.isToggled()||!this.draggable)return;let e=-1;t===B.LEFT?e="previous":t===B.RIGHT?e="next":t===B.HOME?e=0:t===B.END&&(e="last"),~e&&this.show(e)}},{name:"beforeitemshow",handler(t){vt(x(this.selCaption,this.$el),this.getItem().caption||""),vt(x(this.selCounter,this.$el),this.t("counter",this.index+1,this.slides.length));for(let e=-this.preload;e<=this.preload;e++)this.loadItem(this.index+e);this.isToggled()||(this.draggable=!1,t.preventDefault(),this.toggleElement(this.$el,!0,!1),this.animation=ho.scale,_(t.target,this.clsActive),this.stack.splice(1,0,this.index))}},{name:"itemshown",handler(){this.draggable=this.$props.draggable}},{name:"itemload",async handler(t,e){const{source:i,type:s,attrs:n={}}=e;if(this.setItem(e,""),!i)return;let o;const r={allowfullscreen:"",style:"max-width: 100%; box-sizing: border-box;","uk-responsive":"","uk-video":`${!!this.videoAutoplay}`};if(s==="image"||uo(i)){const a=Nt("img");Wn(a,e.sources),k(a,{src:i,...oi(e,["alt","srcset","sizes"]),...n}),w(a,"load",()=>this.setItem(e,O(a)||a)),w(a,"error",()=>this.setError(e))}else if(s==="video"||fo(i)){const a=this.videoAutoplay==="inline",l=Nt("video",{src:i,playsinline:"",controls:a?null:"",loop:a?"":null,poster:this.videoAutoplay?null:e.poster,"uk-video":a?"automute: true":!!this.videoAutoplay,...n});w(l,"loadedmetadata",()=>this.setItem(e,l)),w(l,"error",()=>this.setError(e))}else if(s==="iframe"||i.match(/\.(html|php)($|\?)/i))this.setItem(e,Nt("iframe",{src:i,allowfullscreen:"",class:"uk-lightbox-iframe",...n}));else if(o=i.match(/\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/))this.setItem(e,Nt("iframe",{src:`https://www.youtube${o[1]||""}.com/embed/${o[2]}${o[3]?`?${o[3]}`:""}`,width:1920,height:1080,...r,...n}));else if(o=i.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/))try{const{height:a,width:l}=await(await fetch(`https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(i)}`,{credentials:"omit"})).json();this.setItem(e,Nt("iframe",{src:`https://player.vimeo.com/video/${o[1]}${o[2]?`?${o[2]}`:""}`,width:l,height:a,...r,...n}))}catch{this.setError(e)}}},{name:"itemloaded",handler(){this.$emit("resize")}}],update:{read(){for(const t of D(`${this.selList} :not([controls]):is(img,video)`,this.$el))L(t,this.clsZoom,(t.naturalHeight||t.videoHeight)-this.$el.offsetHeight>Math.max(0,(t.naturalWidth||t.videoWidth)-this.$el.offsetWidth))},events:["resize"]},methods:{loadItem(t=this.index){const e=this.getItem(t);this.getSlide(e).childElementCount||m(this.$el,"itemload",[e])},getItem(t=this.index){return this.items[rt(t,this.slides)]},setItem(t,e){m(this.$el,"itemloaded",[this,vt(this.getSlide(t),e)])},getSlide(t){return this.slides[this.items.indexOf(t)]},setError(t){this.setItem(t,'')},showControls(){clearTimeout(this.controlsTimer),this.controlsTimer=this.delayControls&&setTimeout(this.hideControls,this.delayControls),I(this.$el,"uk-active","uk-transition-active")},hideControls(){_(this.$el,"uk-active","uk-transition-active")}}};function Nt(t,e){const i=It(`<${t}>`);return k(i,e),i}function Qa(t,e){const i=t.poster||t.thumb&&(t.type==="image"||uo(t.thumb))?Nt("img",{src:t.poster||t.thumb,alt:""}):t.thumb&&(t.type==="video"||fo(t.thumb))?Nt("video",{src:t.thumb,loop:"",playsinline:"","uk-video":`autoplay: ${!!e}; automute: true`}):Nt("canvas");return t.thumbRatio&&(i.style.aspectRatio=t.thumbRatio),i}function uo(t){return t==null?void 0:t.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i)}function fo(t){return t==null?void 0:t.match(/\.(mp4|webm|ogv)($|\?)/i)}const tl=".uk-disabled *, .uk-disabled, [disabled]";var el={install:il,props:{toggle:String},data:{toggle:"a"},computed:{toggles:({toggle:t},e)=>D(t,e)},watch:{toggles(t){this.hide();for(const e of t)F(e,"a")&&(e.role="button")}},disconnected(){this.hide()},events:{name:"click",delegate:({toggle:t})=>t,handler(t){t.defaultPrevented||(t.preventDefault(),C(t.current,tl)||this.show(t.current))}},methods:{show(t){let e=this.toggles.map(po);if(this.nav==="thumbnav"&&sl.call(this,this.toggles,e),e=Ys(e,"source"),ae(t)){const{source:i}=po(t);t=xt(e,({source:s})=>i===s)}return this.panel=this.panel||this.$create("lightboxPanel",{...this.$props,items:e}),w(this.panel.$el,"hidden",()=>this.panel=null),this.panel.show(t)},hide(){var t;return(t=this.panel)==null?void 0:t.hide()}}};function il(t,e){t.lightboxPanel||t.component("lightboxPanel",co),ft(e.props,t.component("lightboxPanel").options.props)}function sl(t,e){for(const[i,s]of Object.entries(t)){if(e[i].thumb)continue;const n=fe(s).reverse().concat(s).find(r=>this.$el.contains(r)&&(r===s||D(this.toggle,r).length===1));if(!n)continue;const o=x("img,video",n);o&&(e[i].thumb=o.currentSrc||o.poster||o.src,e[i].thumbRatio=(o.naturalWidth||o.videoWidth)/(o.naturalHeight||o.videoHeight))}}function po(t){const e={};for(const i of t.getAttributeNames()){const s=i.replace(/^data-/,"");e[s==="href"?"source":s]=t.getAttribute(i)}return e.attrs=ve(e.attrs),e}var nl={mixins:[Xe],functional:!0,args:["message","status"],data:{message:"",status:"",timeout:5e3,group:"",pos:"top-center",clsContainer:"uk-notification",clsClose:"uk-notification-close",clsMsg:"uk-notification-message"},install:ol,computed:{marginProp:({pos:t})=>`margin-${t.match(/[a-z]+(?=-)/)[0]}`,startProps(){return{opacity:0,[this.marginProp]:-this.$el.offsetHeight}}},created(){const t=`${this.clsContainer}-${this.pos}`,e=`data-${this.clsContainer}-container`,i=x(`.${t}[${e}]`,this.container)||W(this.container,`
            `);this.$mount(W(i,``))},async connected(){const t=S(h(this.$el,this.marginProp));await M.start(h(this.$el,this.startProps),{opacity:1,[this.marginProp]:t}),this.timeout&&(this.timer=setTimeout(this.close,this.timeout))},events:{click(t){Et(t),this.close()},[At](){this.timer&&clearTimeout(this.timer)},[Ut](){this.timeout&&(this.timer=setTimeout(this.close,this.timeout))}},methods:{async close(t){const e=i=>{const s=O(i);m(i,"close",[this]),Q(i),s!=null&&s.hasChildNodes()||Q(s)};this.timer&&clearTimeout(this.timer),t||await M.start(this.$el,this.startProps),e(this.$el)}}};function ol(t){t.notification.closeAll=function(e,i){Mt(document.body,s=>{const n=t.getComponent(s,"notification");n&&(!e||e===n.group)&&n.close(i)})}}var Pi={props:{media:Boolean},data:{media:!1},connected(){const t=rl(this.media,this.$el);if(this.matchMedia=!0,t){this.mediaObj=window.matchMedia(t);const e=()=>{this.matchMedia=this.mediaObj.matches,m(this.$el,pe("mediachange",!1,!0,[this.mediaObj]))};this.offMediaObj=w(this.mediaObj,"change",()=>{e(),this.$emit("resize")}),e()}},disconnected(){var t;(t=this.offMediaObj)==null||t.call(this)}};function rl(t,e){if(H(t)){if(wt(t,"@"))t=S(h(e,`--uk-breakpoint-${t.slice(1)}`));else if(isNaN(t))return t}return t&&mt(t)?`(min-width: ${t}px)`:""}function go(t){return q(t)?Math.ceil(Math.max(0,...D("[stroke]",t).map(e=>{var i;return((i=e.getTotalLength)==null?void 0:i.call(e))||0}))):0}const _i={x:Ai,y:Ai,rotate:Ai,scale:Ai,color:Ds,backgroundColor:Ds,borderColor:Ds,blur:ee,hue:ee,fopacity:ee,grayscale:ee,invert:ee,saturate:ee,sepia:ee,opacity:ll,stroke:hl,bgx:bo,bgy:bo},{keys:mo}=Object;var vo={mixins:[Pi],props:ko(mo(_i),"list"),data:ko(mo(_i),void 0),computed:{props(t,e){const i={};for(const n in t)n in _i&&!X(t[n])&&(i[n]=t[n].slice());const s={};for(const n in i)s[n]=_i[n](n,e,i[n],i);return s}},events:{load(){this.$emit()}},methods:{reset(){St(this.$el,this.getCss(0))},getCss(t){const e={};for(const i in this.props)this.props[i](e,K(t));return e.willChange=Object.keys(e).map(di).join(","),e}}};function Ai(t,e,i){let s=Mi(i)||{x:"px",y:"px",rotate:"deg"}[t]||"",n;return t==="x"||t==="y"?(t=`translate${Ht(t)}`,n=o=>S(S(o).toFixed(s==="px"?0:6))):t==="scale"&&(s="",n=o=>{var r;return Mi([o])?G(o,"width",e,!0)/e[`offset${(r=o.endsWith)!=null&&r.call(o,"vh")?"Height":"Width"}`]:S(o)}),i.length===1&&i.unshift(t==="scale"?1:0),i=ye(i,n),(o,r)=>{o.transform=`${o.transform||""} ${t}(${Qe(i,r)}${s})`}}function Ds(t,e,i){return i.length===1&&i.unshift(ti(e,t,"")),i=ye(i,s=>al(e,s)),(s,n)=>{const[o,r,a]=yo(i,n),l=o.map((c,u)=>(c+=a*(r[u]-c),u===3?S(c):parseInt(c,10))).join(",");s[t]=`rgba(${l})`}}function al(t,e){return ti(t,"color",e).split(/[(),]/g).slice(1,-1).concat(1).slice(0,4).map(S)}function ee(t,e,i){i.length===1&&i.unshift(0);const s=Mi(i)||{blur:"px",hue:"deg"}[t]||"%";return t={fopacity:"opacity",hue:"hue-rotate"}[t]||t,i=ye(i),(n,o)=>{const r=Qe(i,o);n.filter=`${n.filter||""} ${t}(${r+s})`}}function ll(t,e,i){return i.length===1&&i.unshift(ti(e,t,"")),i=ye(i),(s,n)=>{s[t]=Qe(i,n)}}function hl(t,e,i){i.length===1&&i.unshift(0);const s=Mi(i),n=go(e);return i=ye(i.reverse(),o=>(o=S(o),s==="%"?o*n/100:o)),i.some(([o])=>o)?(h(e,"strokeDasharray",n),(o,r)=>{o.strokeDashoffset=Qe(i,r)}):A}function bo(t,e,i,s){i.length===1&&i.unshift(0);const n=t==="bgy"?"height":"width";s[t]=ye(i,a=>G(a,n,e));const o=["bgx","bgy"].filter(a=>a in s);if(o.length===2&&t==="bgx")return A;if(ti(e,"backgroundSize","")==="cover")return cl(t,e,i,s);const r={};for(const a of o)r[a]=wo(e,a);return xo(o,r,s)}function cl(t,e,i,s){const n=ul(e);if(!n.width)return A;const o={width:e.offsetWidth,height:e.offsetHeight},r=["bgx","bgy"].filter(u=>u in s),a={};for(const u of r){const d=s[u].map(([P])=>P),f=Math.min(...d),p=Math.max(...d),b=d.indexOf(f){c(u,d),u.backgroundSize=`${l.width}px ${l.height}px`,u.backgroundRepeat="no-repeat"}}function wo(t,e){return ti(t,`background-position-${e.slice(-1)}`,"")}function xo(t,e,i){return function(s,n){for(const o of t){const r=Qe(i[o],n);s[`background-position-${o.slice(-1)}`]=`calc(${e[o]} + ${r}px)`}}}const $o={},Oi={};function ul(t){const e=h(t,"backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/,"$1");if(Oi[e])return Oi[e];const i=new Image;return e&&(i.src=e,!i.naturalWidth&&!$o[e])?(z(i,"error load",()=>{Oi[e]=Bs(i),m(t,pe("load",!1))}),$o[e]=!0,Bs(i)):Oi[e]=Bs(i)}function Bs(t){return{width:t.naturalWidth,height:t.naturalHeight}}function ye(t,e=S){const i=[],{length:s}=t;let n=0;for(let o=0;o0;u--)i[o-u][1]=l+c*(n-u+1);n=0}}return i}function yo(t,e){const i=xt(t.slice(1),([,s])=>e<=s)+1;return[t[i-1][0],t[i][0],(e-t[i-1][1])/(t[i][1]-t[i-1][1])]}function Qe(t,e){const[i,s,n]=yo(t,e);return i+Math.abs(i-s)*n*(i(i[s]=e,i),{})}function So(t,e){return e>=0?Math.pow(t,e+1):1-Math.pow(1-t,1-e)}var fl={mixins:[vo],props:{target:String,viewport:Number,easing:Number,start:String,end:String},data:{target:!1,viewport:1,easing:1,start:0,end:0},computed:{target:({target:t},e)=>Io(t&&et(t,e)||e),start({start:t}){return G(t,"height",this.target,!0)},end({end:t,viewport:e}){return G(t||(e=(1-e)*100)&&`${e}vh+${e}%`,"height",this.target,!0)}},observe:[bs(),Ye({target:({target:t})=>t}),dt({target:({$el:t,target:e})=>[t,e,Bt(e,!0)]})],update:{read({percent:t},e){if(e.has("scroll")||(t=!1),!q(this.$el))return!1;if(!this.matchMedia)return;const i=t;return t=So(yi(this.target,this.start,this.end),this.easing),{percent:t,style:i===t?!1:this.getCss(t)}},write({style:t}){if(!this.matchMedia){this.reset();return}t&&h(this.$el,t)},events:["scroll","resize"]}};function Io(t){return t?"offsetTop"in t?t:Io(O(t)):document.documentElement}var Eo={props:{parallax:Boolean,parallaxTarget:Boolean,parallaxStart:String,parallaxEnd:String,parallaxEasing:Number},data:{parallax:!1,parallaxTarget:!1,parallaxStart:0,parallaxEnd:0,parallaxEasing:0},observe:[dt({target:({$el:t,parallaxTarget:e})=>[t,e],filter:({parallax:t})=>t}),Ye({filter:({parallax:t})=>t})],computed:{parallaxTarget({parallaxTarget:t},e){return t&&et(t,e)||this.list}},update:{read(){if(!this.parallax)return!1;const t=this.parallaxTarget;if(!t)return!1;const e=G(this.parallaxStart,"height",t,!0),i=G(this.parallaxEnd,"height",t,!0),s=So(yi(t,e,i),this.parallaxEasing);return{parallax:this.getIndexAt(s)}},write({parallax:t}){const[e,i]=t,s=this.getValidIndex(e+Math.ceil(i)),n=this.slides[e],o=this.slides[s],{triggerShow:r,triggerShown:a,triggerHide:l,triggerHidden:c}=pl(this);if(~this.prevIndex)for(const d of new Set([this.index,this.prevIndex]))v([s,e],d)||(l(this.slides[d]),c(this.slides[d]));const u=this.prevIndex!==e||this.index!==s;this.dir=1,this.prevIndex=e,this.index=s,n!==o&&l(n),r(o),u&&a(n),this._translate(n===o?1:i,n,o)},events:["scroll","resize"]},methods:{getIndexAt(t){const e=t*(this.length-1);return[Math.floor(e),e%1]}}};function pl(t){const{clsSlideActive:e,clsEnter:i,clsLeave:s}=t;return{triggerShow:n,triggerShown:o,triggerHide:r,triggerHidden:a};function n(l){$(l,s)&&(r(l),a(l)),$(l,e)||(m(l,"beforeitemshow",[t]),m(l,"itemshow",[t]))}function o(l){$(l,i)&&m(l,"itemshown",[t])}function r(l){$(l,e)||n(l),$(l,i)&&o(l),$(l,s)||(m(l,"beforeitemhide",[t]),m(l,"itemhide",[t]))}function a(l){$(l,s)&&m(l,"itemhidden",[t])}}var To={update:{write(){if(this.stack.length||this.dragging||this.parallax)return;const t=this.getValidIndex();!~this.prevIndex||this.index!==t?this.show(t):this._translate(1)},events:["resize"]}},Co={observe:Ii({target:({slides:t})=>t,targets:t=>t.getAdjacentSlides()}),methods:{getAdjacentSlides(){return[1,-1].map(t=>this.slides[this.getIndex(this.index+t)])}}};function gl(t,e,i,{center:s,easing:n,list:o}){const r=t?ei(t,o,s):ei(e,o,s)+g(e).width*i,a=e?ei(e,o,s):r+g(t).width*i*(U?-1:1),{promise:l,resolve:c}=Vn();return{dir:i,show(u,d=0,f){const p=f?"linear":n;return u-=Math.round(u*K(d,-1,1)),h(o,"transitionProperty","none"),this.translate(d),h(o,"transitionProperty",""),d=t?d:K(d,0,1),Zt(this.getItemIn(),"itemin",{percent:d,duration:u,timing:p,dir:i}),t&&Zt(this.getItemIn(!0),"itemout",{percent:1-d,duration:u,timing:p,dir:i}),M.start(o,{transform:j(-a*(U?-1:1),"px")},u,p).then(c,A),l},cancel(){return M.cancel(o)},reset(){h(o,"transform","")},async forward(u,d=this.percent()){return await this.cancel(),this.show(u,d,!0)},translate(u){if(u===this.percent())return;const d=this.getDistance()*i*(U?-1:1);h(o,"transform",j(K(-a+(d-d*u),-ke(o),g(o).width)*(U?-1:1),"px"));const f=this.getActives(),p=this.getItemIn(),b=this.getItemIn(!0);u=t?K(u,-1,1):0;for(const y of N(o)){const P=v(f,y),it=y===p,Tt=y===b,zt=it||!Tt&&(P||i*(U?-1:1)===-1^Di(y,o)>Di(t||e));Zt(y,`itemtranslate${zt?"in":"out"}`,{dir:i,percent:Tt?1-u:it?u:P?1:0})}},percent(){return Math.abs((new DOMMatrix(h(o,"transform")).m41*(U?-1:1)+r)/(a-r))},getDistance(){return Math.abs(a-r)},getItemIn(u=!1){let d=this.getActives(),f=_o(o,ei(e||t,o,s));if(u){const p=d;d=f,f=p}return f[xt(f,p=>!v(d,p))]},getActives(){return _o(o,ei(t||e,o,s))}}}function ei(t,e,i){const s=Di(t,e);return i?s-ml(t,e):Math.min(s,Po(e))}function Po(t){return Math.max(0,ke(t)-g(t).width)}function ke(t,e){return jt(N(t).slice(0,e),i=>g(i).width)}function ml(t,e){return g(e).width/2-g(t).width/2}function Di(t,e){return t&&(is(t).left+(U?g(t).width-g(e).width:0))*(U?-1:1)||0}function _o(t,e){e-=1;const i=g(t).width,s=e+i+2;return N(t).filter(n=>{const o=Di(n,t),r=o+Math.min(g(n).width,i);return o>=e&&r<=s})}var vl={mixins:[st,ro,To,Eo,Co],props:{center:Boolean,sets:Boolean,active:String},data:{center:!1,sets:!1,attrItem:"uk-slider-item",selList:".uk-slider-items",selNav:".uk-slider-nav",clsContainer:"uk-slider-container",active:"all",Transitioner:gl},computed:{finite({finite:t}){return t||bl(this.list,this.center)},maxIndex(){if(!this.finite||this.center&&!this.sets)return this.length-1;if(this.center)return Wt(this.sets);let t=0;const e=Po(this.list),i=xt(this.slides,s=>{if(t>=e-.005)return!0;t+=g(s).width});return~i?i:this.length-1},sets({sets:t}){if(!t||this.parallax)return;let e=0;const i=[],s=g(this.list).width;for(let n=0;ns&&(e=0),this.center?es/2&&(i.push(n),e=s/2-o/2):e===0&&i.push(Math.min(n,this.maxIndex)),e+=o}if(i.length)return i},transitionOptions(){return{center:this.center,list:this.list}},slides(){return N(this.list).filter(q)}},connected(){L(this.$el,this.clsContainer,!x(`.${this.clsContainer}`,this.$el))},observe:dt({target:({slides:t,$el:e})=>[e,...t]}),update:{write(){for(const t of this.navItems){const e=$t(Z(t,this.attrItem));e!==!1&&(t.hidden=!this.maxIndex||e>this.maxIndex||this.sets&&!v(this.sets,e))}this.reorder(),this.parallax||this._translate(1),this.updateActiveClasses()},events:["resize"]},events:{beforeitemshow(t){!this.dragging&&this.sets&&this.stack.length<2&&!v(this.sets,this.index)&&(this.index=this.getValidIndex());const e=Math.abs(this.index-this.prevIndex+(this.dir>0&&this.indexthis.prevIndex?(this.maxIndex+1)*this.dir:0));if(!this.dragging&&e>1){for(let n=0;n0?"next":"previous");t.preventDefault();return}const i=this.dir<0||!this.slides[this.prevIndex]?this.index:this.prevIndex,s=ke(this.list)/this.length;this.duration=ao(s/this.velocity)*(g(this.slides[i]).width/s),this.reorder()},itemshow(){~this.prevIndex&&I(this._getTransitioner().getItemIn(),this.clsActive),this.updateActiveClasses(this.prevIndex)},itemshown(){this.updateActiveClasses()}},methods:{reorder(){if(this.finite){h(this.slides,"order","");return}const t=this.dir>0&&this.slides[this.prevIndex]?this.prevIndex:this.index;if(this.slides.forEach((n,o)=>h(n,"order",this.dir>0&&o=this.index?-1:"")),!this.center||!this.length)return;const e=this.slides[t];let i=g(this.list).width/2-g(e).width/2,s=0;for(;i>0;){const n=this.getIndex(--s+t,t),o=this.slides[n];h(o,"order",n>t?-2:-1),i-=g(o).width}},updateActiveClasses(t=this.index){let e=this._getTransitioner(t).getActives();this.active!=="all"&&(e=[this.slides[this.getValidIndex(t)]]);const i=[this.clsActive,!this.sets||v(this.sets,S(this.index))?this.clsActivated:""];for(const s of this.slides){const n=v(e,s);L(s,i,n),s.ariaHidden=!n;for(const o of D(de,s))gt(o,"_tabindex")||(o._tabindex=o.tabIndex),o.tabIndex=n?o._tabindex:-1}},getValidIndex(t=this.index,e=this.prevIndex){if(t=this.getIndex(t,e),!this.sets)return t;let i;do{if(v(this.sets,t))return t;i=t,t=this.getIndex(t+this.dir,e)}while(t!==i);return t},getAdjacentSlides(){const{width:t}=g(this.list),e=-t,i=t*2,s=g(this.slides[this.index]).width,n=this.center?t/2-s/2:0,o=new Set;for(const r of[-1,1]){let a=n+(r>0?s:0),l=0;do{const c=this.slides[this.getIndex(this.index+r+l++*r)];a+=g(c).width*r,o.add(c)}while(this.length>l&&a>e&&a=0&&ejt(s.filter(u=>!l.has(u)),u=>g(u).width))return!0}return!1}function wl(t){return Math.max(0,...N(t).map(e=>g(e).width))}var Ao={mixins:[vo],beforeConnect(){this.item=this.$el.closest(`.${this.$options.id.replace("parallax","items")} > *`)},disconnected(){this.item=null},events:[{name:"itemin itemout",self:!0,el:({item:t})=>t,handler({type:t,detail:{percent:e,duration:i,timing:s,dir:n}}){Dt.read(()=>{if(!this.matchMedia)return;const o=this.getCss(Mo(t,n,e)),r=this.getCss(Oo(t)?.5:n>0?1:0);Dt.write(()=>{h(this.$el,o),M.start(this.$el,r,i,s).catch(A)})})}},{name:"transitioncanceled transitionend",self:!0,el:({item:t})=>t,handler(){M.cancel(this.$el)}},{name:"itemtranslatein itemtranslateout",self:!0,el:({item:t})=>t,handler({type:t,detail:{percent:e,dir:i}}){Dt.read(()=>{if(!this.matchMedia){this.reset();return}const s=this.getCss(Mo(t,i,e));Dt.write(()=>h(this.$el,s))})}}]};function Oo(t){return oe(t,"in")}function Mo(t,e,i){return i/=2,Oo(t)^e<0?i:1-i}var xl={mixins:[st,lo,To,Eo,Co],props:{ratio:String,minHeight:String,maxHeight:String},data:{ratio:"16:9",minHeight:void 0,maxHeight:void 0,selList:".uk-slideshow-items",attrItem:"uk-slideshow-item",selNav:".uk-slideshow-nav",Animations:Za},watch:{list(t){h(t,{aspectRatio:this.ratio?this.ratio.replace(":","/"):void 0,minHeight:this.minHeight,maxHeight:this.maxHeight,width:"100%"})}},methods:{getAdjacentSlides(){return[1,-1].map(t=>this.slides[this.getIndex(this.index+t)])}}},$l={mixins:[st,zn],props:{group:String,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},data:{group:!1,threshold:5,clsItem:"uk-sortable-item",clsPlaceholder:"uk-sortable-placeholder",clsDrag:"uk-sortable-drag",clsDragState:"uk-drag",clsBase:"uk-sortable",clsNoDrag:"uk-sortable-nodrag",clsEmpty:"uk-sortable-empty",clsCustom:"",handle:!1,pos:{}},events:{name:ut,passive:!1,handler(t){this.init(t)}},computed:{target:(t,e)=>(e.tBodies||[e])[0],items(){return N(this.target)},isEmpty(){return!this.items.length},handles({handle:t},e){return t?D(t,e):this.items}},watch:{isEmpty(t){L(this.target,this.clsEmpty,t)},handles(t,e){const i={touchAction:"none",userSelect:"none"};St(e,i),h(t,i)}},update:{write(t){if(!this.drag||!O(this.placeholder))return;const{pos:{x:e,y:i},origin:{offsetTop:s,offsetLeft:n},placeholder:o}=this;h(this.drag,{top:i-s,left:e-n});const r=this.getSortable(document.elementFromPoint(e,i));if(!r)return;const{items:a}=r;if(a.some(M.inProgress))return;const l=Il(a,{x:e,y:i});if(a.length&&(!l||l===o))return;const c=this.getSortable(o),u=El(r.target,l,o,e,i,r===c&&t.moved!==l);u!==!1&&(u&&o===u||(r!==c?(c.remove(o),t.moved=l):delete t.moved,r.insert(o,u),this.touched.add(r)))},events:["move"]},methods:{init(t){const{target:e,button:i,defaultPrevented:s}=t,[n]=this.items.filter(o=>o.contains(e));!n||s||i>0||ci(e)||e.closest(`.${this.clsNoDrag}`)||this.handle&&!e.closest(this.handle)||(t.preventDefault(),this.pos=kt(t),this.touched=new Set([this]),this.placeholder=n,this.origin={target:e,index:yt(n),...this.pos},w(document,Me,this.move),w(document,_t,this.end),this.threshold||this.start(t))},start(t){this.drag=Sl(this.$container,this.placeholder);const{left:e,top:i}=g(this.placeholder);ft(this.origin,{offsetLeft:this.pos.x-e,offsetTop:this.pos.y-i}),I(this.drag,this.clsDrag,this.clsCustom),I(this.placeholder,this.clsPlaceholder),I(this.items,this.clsItem),I(document.documentElement,this.clsDragState),m(this.$el,"start",[this,this.placeholder]),yl(this.pos),this.move(t)},move:Cl(function(t){ft(this.pos,kt(t)),!this.drag&&(Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t),this.$emit("move")}),end(){if(Yt(document,Me,this.move),Yt(document,_t,this.end),!this.drag)return;kl();const t=this.getSortable(this.placeholder);this===t?this.origin.index!==yt(this.placeholder)&&m(this.$el,"moved",[this,this.placeholder]):(m(t.$el,"added",[t,this.placeholder]),m(this.$el,"removed",[this,this.placeholder])),m(this.$el,"stop",[this,this.placeholder]),Q(this.drag),this.drag=null;for(const{clsPlaceholder:e,clsItem:i}of this.touched)for(const s of this.touched)_(s.items,e,i);this.touched=null,_(document.documentElement,this.clsDragState)},insert(t,e){I(this.items,this.clsItem),e&&e.previousElementSibling!==t?this.animate(()=>pi(e,t)):!e&&this.target.lastElementChild!==t&&this.animate(()=>W(this.target,t))},remove(t){this.target.contains(t)&&this.animate(()=>Q(t))},getSortable(t){do{const e=this.$getComponent(t,"sortable");if(e&&(e===this||this.group!==!1&&e.group===this.group))return e}while(t=O(t))}}};let Do;function yl(t){let e=Date.now();Do=setInterval(()=>{let{x:i,y:s}=t;s+=document.scrollingElement.scrollTop;const n=(Date.now()-e)*.3;e=Date.now(),Xt(document.elementFromPoint(i,t.y)).reverse().some(o=>{let{scrollTop:r,scrollHeight:a}=o;const{top:l,bottom:c,height:u}=at(o);if(ls)r-=n;else if(c>s&&c-350&&r"),W(i,e.cloneNode(!0).children);for(const s of e.getAttributeNames())k(i,s,e.getAttribute(s))}else i=e.cloneNode(!0);return W(t,i),h(i,"margin","0","important"),h(i,{boxSizing:"border-box",width:e.offsetWidth,height:e.offsetHeight,padding:h(e,"padding")}),tt(i.firstElementChild,tt(e.firstElementChild)),i}function Il(t,e){return t[xt(t,i=>ai(e,g(i)))]}function El(t,e,i,s,n,o){if(!N(t).length)return;const r=g(e);if(!o)return Tl(t,i)||nr[f]-p?!1:e}function Tl(t,e){const i=N(t).length===1;i&&W(t,e);const s=N(t),n=s.some((o,r)=>{const a=g(o);return s.slice(r+1).some(l=>{const c=g(l);return!Bo([a.left,a.right],[c.left,c.right])})});return i&&Q(e),n}function Bo(t,e){return t[1]>e[0]&&e[1]>t[0]}function Cl(t){let e;return function(...i){e||(e=!0,t.call(this,...i),requestAnimationFrame(()=>e=!1))}}var Pl={mixins:[Xe,Kt,Rn],data:{pos:"top",animation:["uk-animation-scale-up"],duration:100,cls:"uk-active"},connected(){_l(this.$el)},disconnected(){this.hide()},methods:{show(){if(this.isToggled(this.tooltip||null))return;const{delay:t=0,title:e}=Ol(this.$options);if(!e)return;const i=k(this.$el,"title"),s=w(this.$el,["blur",Ut],o=>!pt(o)&&this.hide());this.reset=()=>{k(this.$el,{title:i,"aria-describedby":null}),s()};const n=te(this);k(this.$el,{title:null,"aria-describedby":n}),clearTimeout(this.showTimer),this.showTimer=setTimeout(()=>this._show(e,n),t)},async hide(){var t;C(this.$el,"input:focus")||(clearTimeout(this.showTimer),this.isToggled(this.tooltip||null)&&await this.toggleElement(this.tooltip,!1,!1),(t=this.reset)==null||t.call(this),Q(this.tooltip),this.tooltip=null)},async _show(t,e){this.tooltip=W(this.container,``),w(this.tooltip,"toggled",(i,s)=>{if(!s)return;const n=()=>this.positionAt(this.tooltip,this.$el);n();const[o,r]=Al(this.tooltip,this.$el,this.pos);this.origin=this.axis==="y"?`${bi(o)}-${r}`:`${r}-${bi(o)}`;const a=[z(document,`keydown ${ut}`,this.hide,!1,l=>l.type===ut&&!this.$el.contains(l.target)||l.type==="keydown"&&l.keyCode===B.ESC),w([document,...Jt(this.$el)],"scroll",n,{passive:!0})];z(this.tooltip,"hide",()=>a.forEach(l=>l()),{self:!0})}),await this.toggleElement(this.tooltip,!0)||this.hide()}},events:{[`focus ${At} ${ut}`](t){(!pt(t)||t.type===ut)&&document.readyState!=="loading"&&this.show()}}};function _l(t){Be(t)||(t.tabIndex=0)}function Al(t,e,[i,s]){const n=T(t),o=T(e),r=[["left","right"],["top","bottom"]];for(const l of r){if(n[l[0]]>=o[l[1]]){i=l[1];break}if(n[l[1]]<=o[l[0]]){i=l[0];break}}return s=(v(r[0],i)?r[1]:r[0]).find(l=>n[l]===o[l])||"center",[i,s]}function Ol(t){const{el:e,id:i,data:s}=t;return["delay","title"].reduce((n,o)=>({[o]:Z(e,o),...n}),{...ve(Z(e,i),["title"]),...s})}var Ml={mixins:[Ei],i18n:{invalidMime:"Invalid File Type: %s",invalidName:"Invalid File Name: %s",invalidSize:"Invalid File Size: %s Kilobytes Max"},props:{allow:String,clsDragover:String,concurrent:Number,maxSize:Number,method:String,mime:String,multiple:Boolean,name:String,params:Object,type:String,url:String},data:{allow:!1,clsDragover:"uk-dragover",concurrent:1,maxSize:0,method:"POST",mime:!1,multiple:!1,name:"files[]",params:{},type:"",url:"",abort:A,beforeAll:A,beforeSend:A,complete:A,completeAll:A,error:A,fail:A,load:A,loadEnd:A,loadStart:A,progress:A},events:{change(t){C(t.target,'input[type="file"]')&&(t.preventDefault(),t.target.files&&this.upload(t.target.files),t.target.value="")},drop(t){Bi(t);const e=t.dataTransfer;e!=null&&e.files&&(_(this.$el,this.clsDragover),this.upload(e.files))},dragenter(t){Bi(t)},dragover(t){Bi(t),I(this.$el,this.clsDragover)},dragleave(t){Bi(t),_(this.$el,this.clsDragover)}},methods:{async upload(t){if(t=re(t),!t.length)return;m(this.$el,"upload",[t]);for(const s of t){if(this.maxSize&&this.maxSize*1e3{const n=new FormData;s.forEach(o=>n.append(this.name,o));for(const o in this.params)n.append(o,this.params[o]);try{const o=await Bl(this.url,{data:n,method:this.method,responseType:this.type,beforeSend:r=>{const{xhr:a}=r;w(a.upload,"progress",this.progress);for(const l of["loadStart","load","loadEnd","abort"])w(a,l.toLowerCase(),this[l]);return this.beforeSend(r)}});this.complete(o),e.length?await i(e.shift()):this.completeAll(o)}catch(o){this.error(o)}};await i(e.shift())}}};function No(t,e){return e.match(new RegExp(`^${t.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")}$`,"i"))}function Dl(t,e){const i=[];for(let s=0;s{const{xhr:n}=e;for(const o in e)if(o in n)try{n[o]=e[o]}catch{}n.open(e.method.toUpperCase(),t);for(const o in e.headers)n.setRequestHeader(o,e.headers[o]);w(n,"load",()=>{n.status===0||n.status>=200&&n.status<300||n.status===304?i(n):s(ft(Error(n.statusText),{xhr:n,status:n.status}))}),w(n,"error",()=>s(ft(Error("Network Error"),{xhr:n}))),w(n,"timeout",()=>s(ft(Error("Network Timeout"),{xhr:n}))),n.send(e.data)})}var zl=Object.freeze({__proto__:null,Countdown:Yr,Filter:oa,Lightbox:el,LightboxPanel:co,Notification:nl,Parallax:fl,Slider:vl,SliderParallax:Ao,Slideshow:xl,SlideshowParallax:Ao,Sortable:$l,Tooltip:Pl,Upload:Ml});function Fl(t){qt&&window.MutationObserver&&(document.body?requestAnimationFrame(()=>zo(t)):new MutationObserver((e,i)=>{document.body&&(zo(t),i.disconnect())}).observe(document.documentElement,{childList:!0}))}function zo(t){m(document,"uikit:init",t),document.body&&Mt(document.body,Fo),new MutationObserver(Hl).observe(document,{subtree:!0,childList:!0,attributes:!0}),t._initialized=!0}function Hl(t){var e;for(const{addedNodes:i,removedNodes:s,target:n,attributeName:o}of t){for(const a of i)Mt(a,Fo);for(const a of s)Mt(a,Ll);const r=o&&Ho(o);r&&(Pt(n,o)?Ke(r,n):(e=Ci(n,r))==null||e.$destroy())}}function Fo(t){const e=Ze(t);for(const i in e)Os(e[i]);for(const i of t.getAttributeNames()){const s=Ho(i);s&&Ke(s,t)}}function Ll(t){const e=Ze(t);for(const i in e)Ms(e[i])}function Ho(t){wt(t,"data-")&&(t=t.slice(5));const e=xe[t];return e&&(e.options||e).name}Ua(ht),Va(ht);var Lo={mixins:[st,Kt],props:{animation:Boolean,targets:String,active:null,collapsible:Boolean,multiple:Boolean,toggle:String,content:String,offset:Number},data:{targets:"> *",active:!1,animation:!0,collapsible:!0,multiple:!1,clsOpen:"uk-open",toggle:"> .uk-accordion-title",content:"> .uk-accordion-content",offset:0},computed:{items:({targets:t},e)=>D(t,e),toggles({toggle:t}){return this.items.map(e=>x(t,e))},contents({content:t}){return this.items.map(e=>{var i;return((i=e._wrapper)==null?void 0:i.firstElementChild)||x(t,e)})}},watch:{items(t,e){if(e||$(t,this.clsOpen))return;const i=this.active!==!1&&t[Number(this.active)]||!this.collapsible&&t[0];i&&this.toggle(i,!1)},toggles(){this.$emit()},contents(t){for(const e of t){const i=$(this.items.find(s=>s.contains(e)),this.clsOpen);Ni(e,!i)}this.$emit()}},observe:Ii(),events:[{name:"click keydown",delegate:({targets:t,$props:e})=>`${t} ${e.toggle}`,async handler(t){var e;t.type==="keydown"&&t.keyCode!==B.SPACE||(Et(t),(e=this._off)==null||e.call(this),this._off=jl(t.target),await this.toggle(yt(this.toggles,t.current)),this._off())}},{name:"shown hidden",self:!0,delegate:({targets:t})=>t,handler(){this.$emit()}}],update(){const t=Ne(this.items,`.${this.clsOpen}`);for(const e in this.items){const i=this.toggles[e],s=this.contents[e];if(!i||!s)continue;i.id=te(this,i),s.id=te(this,s);const n=v(t,this.items[e]);k(i,{role:F(i,"a")?"button":null,"aria-controls":s.id,"aria-expanded":n,"aria-disabled":!this.collapsible&&t.length<2&&n}),k(s,{role:"region","aria-labelledby":i.id}),F(s,"ul")&&k(N(s),"role","presentation")}},methods:{toggle(t,e){t=this.items[rt(t,this.items)];let i=[t];const s=Ne(this.items,`.${this.clsOpen}`);if(!this.multiple&&!v(s,i[0])&&(i=i.concat(s)),!(!this.collapsible&&s.length<2&&v(s,t)))return Promise.all(i.map(n=>this.toggleElement(n,!v(s,n),(o,r)=>{if(L(o,this.clsOpen,r),e===!1||!this.animation){Ni(x(this.content,o),!r);return}return Wl(o,r,this)})))}}};function Ni(t,e){t&&(t.hidden=e)}async function Wl(t,e,{content:i,duration:s,velocity:n,transition:o}){var r;i=((r=t._wrapper)==null?void 0:r.firstElementChild)||x(i,t),t._wrapper||(t._wrapper=Le(i,"
            "));const a=t._wrapper;h(a,"overflow","hidden");const l=S(h(a,"height"));await M.cancel(a),Ni(i,!1);const c=jt(["marginTop","marginBottom"],d=>h(i,d))+g(i).height,u=l/c;s=(n*c+s)*(e?1-u:u),h(a,"height",l),await M.start(a,{height:e?c:0},s,o),We(i),delete t._wrapper,e||Ni(i,!0)}function jl(t){const e=Bt(t,!0);let i;return function s(){i=requestAnimationFrame(()=>{const{top:n}=g(t);n<0&&(e.scrollTop+=n),s()})}(),()=>requestAnimationFrame(()=>cancelAnimationFrame(i))}var Rl={mixins:[st,Kt],args:"animation",props:{animation:Boolean,close:String},data:{animation:!0,selClose:".uk-alert-close",duration:150},events:{name:"click",delegate:({selClose:t})=>t,handler(t){Et(t),this.close()}},methods:{async close(){await this.toggleElement(this.$el,!1,ql),this.$destroy(!0)}}};function ql(t,e,{duration:i,transition:s,velocity:n}){const o=S(h(t,"height"));return h(t,"height",o),M.start(t,{height:0,marginTop:0,marginBottom:0,paddingTop:0,paddingBottom:0,borderTop:0,borderBottom:0,opacity:0},n*o+i,s)}var Wo={args:"autoplay",props:{automute:Boolean,autoplay:Boolean},data:{automute:!1,autoplay:!0},beforeConnect(){this.autoplay==="inview"&&!Pt(this.$el,"preload")&&(this.$el.preload="none"),F(this.$el,"iframe")&&!Pt(this.$el,"allow")&&(this.$el.allow="autoplay"),this.autoplay==="hover"&&(F(this.$el,"video")?this.$el.tabIndex=0:this.autoplay=!0),this.automute&&pn(this.$el)},events:[{name:`${At} focusin`,filter:({autoplay:t})=>v(t,"hover"),handler(t){!pt(t)||!Ul(this.$el)?as(this.$el):$i(this.$el)}},{name:`${Ut} focusout`,filter:({autoplay:t})=>v(t,"hover"),handler(t){pt(t)||$i(this.$el)}}],observe:[be({filter:({autoplay:t})=>t!=="hover",handler([{isIntersecting:t}]){document.fullscreenElement||(t?this.autoplay&&as(this.$el):$i(this.$el))},args:{intersecting:!1},options:({$el:t,autoplay:e})=>({root:e==="inview"?null:O(t).closest(":not(a)")})})]};function Ul(t){return!t.paused&&!t.ended}var Vl={mixins:[Wo],props:{width:Number,height:Number},data:{automute:!0},created(){this.useObjectFit=F(this.$el,"img","video")},observe:dt({target:({$el:t})=>jo(t)||O(t),filter:({useObjectFit:t})=>!t}),update:{read(){if(this.useObjectFit)return!1;const{$el:t,width:e=t.clientWidth,height:i=t.clientHeight}=this,s=jo(t)||O(t),n=Ui.cover({width:e,height:i},{width:s.offsetWidth,height:s.offsetHeight});return n.width&&n.height?n:!1},write({height:t,width:e}){h(this.$el,{height:t,width:e})},events:["resize"]}};function jo(t){for(;t=O(t);)if(h(t,"position")!=="static")return t}let Y;var Ro={mixins:[Xe,Rn,Kt],args:"pos",props:{mode:"list",toggle:Boolean,boundary:Boolean,boundaryX:Boolean,boundaryY:Boolean,target:Boolean,targetX:Boolean,targetY:Boolean,stretch:Boolean,delayShow:Number,delayHide:Number,autoUpdate:Boolean,clsDrop:String,animateOut:Boolean,bgScroll:Boolean,closeOnScroll:Boolean},data:{mode:["click","hover"],toggle:"- *",boundary:!1,boundaryX:!1,boundaryY:!1,target:!1,targetX:!1,targetY:!1,stretch:!1,delayShow:0,delayHide:800,autoUpdate:!0,clsDrop:!1,animateOut:!1,bgScroll:!0,animation:["uk-animation-fade"],cls:"uk-open",container:!1,closeOnScroll:!1,selClose:".uk-drop-close"},computed:{boundary({boundary:t,boundaryX:e,boundaryY:i},s){return[et(e||t,s)||window,et(i||t,s)||window]},target({target:t,targetX:e,targetY:i},s){return e||(e=t||this.targetEl),i||(i=t||this.targetEl),[e===!0?window:et(e,s),i===!0?window:et(i,s)]}},created(){this.tracker=new un},beforeConnect(){this.clsDrop=this.$props.clsDrop||this.$options.id},connected(){I(this.$el,"uk-drop",this.clsDrop),this.toggle&&!this.targetEl&&(this.targetEl=Gl(this)),k(this.targetEl,"aria-expanded",!1),this._style=oi(this.$el.style,["width","height"])},disconnected(){this.isActive()&&(this.hide(!1),Y=null),h(this.$el,this._style)},events:[{name:"click",delegate:({selClose:t})=>t,handler(t){Et(t),this.hide(!1)}},{name:"click",delegate:()=>'a[href*="#"]',handler({defaultPrevented:t,current:e}){const{hash:i}=e;!t&&i&&Vt(e)&&!this.$el.contains(x(i))&&this.hide(!1)}},{name:"beforescroll",handler(){this.hide(!1)}},{name:"toggle",self:!0,handler(t,e){t.preventDefault(),this.isToggled()?this.hide(!1):this.show(e==null?void 0:e.$el,!1)}},{name:"toggleshow",self:!0,handler(t,e){t.preventDefault(),this.show(e==null?void 0:e.$el)}},{name:"togglehide",self:!0,handler(t){t.preventDefault(),C(this.$el,":focus,:hover")||this.hide()}},{name:`${At} focusin`,filter:({mode:t})=>v(t,"hover"),handler(t){pt(t)||this.clearTimers()}},{name:`${Ut} focusout`,filter:({mode:t})=>v(t,"hover"),handler(t){!pt(t)&&t.relatedTarget&&this.hide()}},{name:"toggled",self:!0,handler(t,e){e&&(this.clearTimers(),this.position())}},{name:"show",self:!0,handler(){Y=this,this.tracker.init(),k(this.targetEl,"aria-expanded",!0);const t=[Xl(this),Jl(this),Zl(this),this.autoUpdate&&qo(this),this.closeOnScroll&&Kl(this)];z(this.$el,"hide",()=>t.forEach(e=>e&&e()),{self:!0}),this.bgScroll||z(this.$el,"hidden",jn(this.$el),{self:!0})}},{name:"beforehide",self:!0,handler(){this.clearTimers()}},{name:"hide",handler({target:t}){if(this.$el!==t){Y=Y===null&&this.$el.contains(t)&&this.isToggled()?this:Y;return}Y=this.isActive()?null:Y,this.tracker.cancel(),k(this.targetEl,"aria-expanded",!1)}}],update:{write(){this.isToggled()&&!$(this.$el,this.clsEnter)&&this.position()}},methods:{show(t=this.targetEl,e=!0){if(this.isToggled()&&t&&this.targetEl&&t!==this.targetEl&&this.hide(!1,!1),this.targetEl=t,this.clearTimers(),!this.isActive()){if(Y){if(e&&Y.isDelaying()){this.showTimer=setTimeout(()=>C(t,":hover")&&this.show(),10);return}let i;for(;Y&&i!==Y&&!Y.$el.contains(this.$el);)i=Y,Y.hide(!1,!1)}this.container&&O(this.$el)!==this.container&&W(this.container,this.$el),this.showTimer=setTimeout(()=>this.toggleElement(this.$el,!0),e&&this.delayShow||0)}},hide(t=!0,e=!0){const i=()=>this.toggleElement(this.$el,!1,this.animateOut&&e);this.clearTimers(),this.isDelayedHide=t,t&&this.isDelaying()?this.hideTimer=setTimeout(this.hide,50):t&&this.delayHide?this.hideTimer=setTimeout(i,this.delayHide):i()},clearTimers(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null},isActive(){return Y===this},isDelaying(){return[this.$el,...D(".uk-drop",this.$el)].some(t=>this.tracker.movesTo(t))},position(){const t=Cs(this.$el);_(this.$el,"uk-drop-stack"),h(this.$el,this._style),this.$el.hidden=!0;const e=this.target.map(o=>Yl(this.$el,o)),i=this.getViewportOffset(this.$el),s=[[0,["x","width","left","right"]],[1,["y","height","top","bottom"]]];for(const[o,[r,a]]of s)this.axis!==r&&v([r,!0],this.stretch)&&h(this.$el,{[a]:Math.min(T(this.boundary[o])[a],e[o][a]-2*i),[`overflow-${r}`]:"auto"});const n=e[0].width-2*i;this.$el.hidden=!1,h(this.$el,"maxWidth",""),this.$el.offsetWidth>n&&I(this.$el,"uk-drop-stack"),h(this.$el,"maxWidth",n),this.positionAt(this.$el,this.target,this.boundary);for(const[o,[r,a,l,c]]of s)if(this.axis===r&&v([r,!0],this.stretch)){const u=Math.abs(this.getPositionOffset()),d=T(this.target[o]),f=T(this.$el);h(this.$el,{[a]:(d[l]>f[l]?d[this.inset?c:l]-Math.max(T(this.boundary[o])[l],e[o][l]+i):Math.min(T(this.boundary[o])[c],e[o][c]-i)-d[this.inset?l:c])-u,[`overflow-${r}`]:"auto"}),this.positionAt(this.$el,this.target,this.boundary)}t()}}};function Yl(t,e){return at(Jt(e).find(i=>i.contains(t)))}function Gl(t){const{$el:e}=t.$create("toggle",et(t.toggle,t.$el),{target:t.$el,mode:t.mode});return e.ariaHasPopup=!0,e}function Xl(t){const e=()=>t.$emit(),i=[os(e),qe(Jt(t.$el).concat(t.target),e)];return()=>i.map(s=>s.disconnect())}function qo(t,e=()=>t.$emit()){return w([document,...Jt(t.$el)],"scroll",e,{passive:!0})}function Jl(t){return w(document,"keydown",e=>{e.keyCode===B.ESC&&t.hide(!1)})}function Kl(t){return qo(t,()=>t.hide(!1))}function Zl(t){return w(document,ut,({target:e})=>{t.$el.contains(e)||z(document,`${_t} ${hi} scroll`,({defaultPrevented:i,type:s,target:n})=>{var o;!i&&s===_t&&e===n&&!((o=t.targetEl)!=null&&o.contains(e))&&t.hide(!1)},!0)})}var Uo={mixins:[st,Xe],props:{align:String,clsDrop:String,boundary:Boolean,dropbar:Boolean,dropbarAnchor:Boolean,duration:Number,mode:Boolean,offset:Boolean,stretch:Boolean,delayShow:Boolean,delayHide:Boolean,target:Boolean,targetX:Boolean,targetY:Boolean,animation:Boolean,animateOut:Boolean,closeOnScroll:Boolean},data:{align:U?"right":"left",clsDrop:"uk-dropdown",clsDropbar:"uk-dropnav-dropbar",boundary:!0,dropbar:!1,dropbarAnchor:!1,delayShow:160,duration:200,container:!1,selNavItem:"> li > a, > ul > li > a"},computed:{dropbarAnchor:({dropbarAnchor:t},e)=>et(t,e)||e,dropbar({dropbar:t}){return t?(t=this._dropbar||et(t,this.$el)||x(`+ .${this.clsDropbar}`,this.$el),t||(this._dropbar=x("
            "))):null},dropContainer(t,e){return this.container||e},dropdowns({clsDrop:t},e){var i;const s=D(`.${t}`,e);if(this.dropContainer!==e)for(const n of D(`.${t}`,this.dropContainer)){const o=(i=this.getDropdown(n))==null?void 0:i.targetEl;!v(s,n)&&o&&this.$el.contains(o)&&s.push(n)}return s},items({selNavItem:t},e){return D(t,e)}},watch:{dropbar(t){I(t,"uk-dropbar","uk-dropbar-top",this.clsDropbar,`uk-${this.$options.name}-dropbar`)},dropdowns(){this.initializeDropdowns()}},connected(){this.initializeDropdowns(),Ql(this.$el)},disconnected(){Q(this._dropbar),delete this._dropbar},events:[{name:"mouseover focusin",delegate:({selNavItem:t})=>t,handler({current:t}){const e=this.getActive();e&&v(e.mode,"hover")&&e.targetEl&&!t.contains(e.targetEl)&&!e.isDelaying()&&e.hide(!1)}},{name:"keydown",self:!0,delegate:({selNavItem:t})=>t,handler(t){var e;const{current:i,keyCode:s}=t,n=this.getActive();if(s===B.DOWN)if((n==null?void 0:n.targetEl)===i)t.preventDefault(),(e=x(de,n.$el))==null||e.focus();else{const o=this.dropdowns.find(r=>{var a;return((a=this.getDropdown(r))==null?void 0:a.targetEl)===i});o&&(t.preventDefault(),i.click(),z(o,"show",r=>{var a;return(a=x(de,r.target))==null?void 0:a.focus()}))}Vo(t,this.items,n)}},{name:"keydown",el:({dropContainer:t})=>t,delegate:({clsDrop:t})=>`.${t}`,handler(t){var e;const{current:i,keyCode:s,target:n}=t;if(ci(n)||!v(this.dropdowns,i))return;const o=this.getActive();let r=-1;if(s===B.HOME?r=0:s===B.END?r="last":s===B.UP?r="previous":s===B.DOWN?r="next":s===B.ESC&&((e=o.targetEl)==null||e.focus()),~r){t.preventDefault();const a=D(de,i);a[rt(r,a,xt(a,l=>C(l,":focus")))].focus();return}Vo(t,this.items,o)}},{name:"mouseleave",el:({dropbar:t})=>t,filter:({dropbar:t})=>t,handler(){const t=this.getActive();t&&v(t.mode,"hover")&&!this.dropdowns.some(e=>C(e,":hover"))&&t.hide()}},{name:"beforeshow",el:({dropContainer:t})=>t,filter:({dropbar:t})=>t,handler({target:t}){this.isDropbarDrop(t)&&(this.dropbar.previousElementSibling!==this.dropbarAnchor&&gi(this.dropbarAnchor,this.dropbar),I(t,`${this.clsDrop}-dropbar`))}},{name:"show",el:({dropContainer:t})=>t,filter:({dropbar:t})=>t,handler({target:t}){if(!this.isDropbarDrop(t))return;const e=this.getDropdown(t),i=()=>{const s=Math.max(...fe(t,`.${this.clsDrop}`).concat(t).map(n=>T(n).bottom));T(this.dropbar,{left:T(this.dropbar).left,top:this.getDropbarOffset(e.getPositionOffset())}),this.transitionTo(s-T(this.dropbar).top+S(h(t,"marginBottom")),t)};this._observer=qe([e.$el,...e.target],i),i()}},{name:"beforehide",el:({dropContainer:t})=>t,filter:({dropbar:t})=>t,handler(t){const e=this.getActive();C(this.dropbar,":hover")&&e.$el===t.target&&this.isDropbarDrop(e.$el)&&v(e.mode,"hover")&&e.isDelayedHide&&!this.items.some(i=>e.targetEl!==i&&C(i,":focus"))&&t.preventDefault()}},{name:"hide",el:({dropContainer:t})=>t,filter:({dropbar:t})=>t,handler({target:t}){var e;if(!this.isDropbarDrop(t))return;(e=this._observer)==null||e.disconnect();const i=this.getActive();(!i||i.$el===t)&&this.transitionTo(0)}}],methods:{getActive(){var t;return v(this.dropdowns,(t=Y)==null?void 0:t.$el)&&Y},async transitionTo(t,e){const{dropbar:i}=this,s=tt(i);if(e=s0&&h(e,"transitionDelay",`${n/t*this.duration}ms`)}h(e,"clipPath",`polygon(0 0,100% 0,100% ${s}px,0 ${s}px)`),tt(i,s),await Promise.all([M.start(i,{height:t},this.duration),M.start(e,{clipPath:`polygon(0 0,100% 0,100% ${t}px,0 ${t}px)`},this.duration).finally(()=>h(e,{clipPath:"",transitionDelay:""}))]).catch(A)},getDropdown(t){return this.$getComponent(t,"drop")||this.$getComponent(t,"dropdown")},isDropbarDrop(t){return v(this.dropdowns,t)&&$(t,this.clsDrop)},getDropbarOffset(t){const{$el:e,target:i,targetY:s}=this,{top:n,height:o}=T(et(s||i||e,e));return n+o+t},initializeDropdowns(){this.$create("drop",this.dropdowns.filter(t=>!this.getDropdown(t)),{...this.$props,flip:!1,shift:!0,pos:`bottom-${this.align}`,boundary:this.boundary===!0?this.$el:this.boundary})}}};function Vo(t,e,i){var s,n,o;const{current:r,keyCode:a}=t;let l=-1;a===B.HOME?l=0:a===B.END?l="last":a===B.LEFT?l="previous":a===B.RIGHT?l="next":a===B.TAB&&((s=i.targetEl)==null||s.focus(),(n=i.hide)==null||n.call(i,!1)),~l&&(t.preventDefault(),(o=i.hide)==null||o.call(i,!1),e[rt(l,e,e.indexOf(i.targetEl||r))].focus())}function Ql(t){const e=()=>i.forEach(s=>s()),i=[z(t.ownerDocument,Me,s=>t.contains(s.target)||e()),w(t,`mouseenter ${At}`,s=>s.stopPropagation(),{capture:!0}),w(t,`mouseleave ${Ut}`,e,{capture:!0})]}var th={mixins:[st],args:"target",props:{target:Boolean},data:{target:!1},computed:{input:(t,e)=>x(De,e),state(){return this.input.nextElementSibling},target({target:t},e){return t&&(t===!0&&O(this.input)===e&&this.input.nextElementSibling||x(t,e))}},update(){var t;const{target:e,input:i}=this;if(!e)return;let s;const n=ci(e)?"value":"textContent",o=e[n],r=(t=i.files)!=null&&t[0]?i.files[0].name:C(i,"select")&&(s=D("option",i).filter(a=>a.selected)[0])?s.textContent:i.value;o!==r&&(e[n]=r)},events:[{name:"change",handler(){this.$emit()}},{name:"reset",el:({$el:t})=>t.closest("form"),handler(){this.$emit()}}]},eh={extends:_n,mixins:[st],name:"grid",props:{masonry:Boolean,parallax:String,parallaxStart:String,parallaxEnd:String,parallaxJustify:Boolean},data:{margin:"uk-grid-margin",clsStack:"uk-grid-stack",masonry:!1,parallax:0,parallaxStart:0,parallaxEnd:0,parallaxJustify:!1},connected(){this.masonry&&I(this.$el,"uk-flex-top","uk-flex-wrap-top")},observe:Ye({filter:({parallax:t,parallaxJustify:e})=>t||e}),update:[{write({rows:t}){L(this.$el,this.clsStack,!t.some(e=>e.length>1))},events:["resize"]},{read(t){const{rows:e}=t;let{masonry:i,parallax:s,parallaxJustify:n,margin:o}=this;if(s=Math.max(0,G(s)),!(i||s||n)||Yo(e)||e[0].some((b,y)=>e.some(P=>P[y]&&P[y].offsetWidth!==b.offsetWidth)))return t.translates=t.scrollColumns=!1;let r=sh(e,o),a,l;i?[a,l]=ih(e,r,i==="next"):a=nh(e);const c=a.map(b=>jt(b,"offsetHeight")+r*(b.length-1)),u=Math.max(0,...c);let d,f,p;return(s||n)&&(d=c.map((b,y)=>n?u-b+s:s/(y%2||8)),n||(s=Math.max(...c.map((b,y)=>b+d[y]-u))),f=G(this.parallaxStart,"height",this.$el,!0),p=G(this.parallaxEnd,"height",this.$el,!0)),{columns:a,translates:l,scrollColumns:d,parallaxStart:f,parallaxEnd:p,padding:s,height:l?u:""}},write({height:t,padding:e}){h(this.$el,"paddingBottom",e||""),t!==!1&&h(this.$el,"height",t)},events:["resize"]},{read({rows:t,scrollColumns:e,parallaxStart:i,parallaxEnd:s}){return{scrolled:e&&!Yo(t)?yi(this.$el,i,s):!1}},write({columns:t,scrolled:e,scrollColumns:i,translates:s}){!e&&!s||t.forEach((n,o)=>n.forEach((r,a)=>{let[l,c]=s&&s[o][a]||[0,0];e&&(c+=e*i[o]),h(r,"transform",`translate(${l}px, ${c}px)`)}))},events:["scroll","resize"]}]};function Yo(t){return t.flat().some(e=>h(e,"position")==="absolute")}function ih(t,e,i){const s=[],n=[],o=Array(t[0].length).fill(0);let r=0;for(let a of t){U&&a.reverse();let l=0;for(const c in a){const{offsetWidth:u,offsetHeight:d}=a[c],f=i?c:o.indexOf(Math.min(...o));Ns(s,f,a[c]),Ns(n,f,[(f-c)*u*(U?-1:1),o[f]-r]),o[f]+=d+e,l=Math.max(l,d)}r+=l+e}return[s,n]}function sh(t,e){const i=t.flat().find(s=>$(s,e));return S(i?h(i,"marginTop"):h(t[0][0],"paddingLeft"))}function nh(t){const e=[];for(const i of t)for(const s in i)Ns(e,s,i[s]);return e}function Ns(t,e,i){t[e]||(t[e]=[]),t[e].push(i)}var oh={args:"target",props:{target:String,row:Boolean},data:{target:"> *",row:!0},computed:{elements:({target:t},e)=>D(t,e)},observe:dt({target:({$el:t,elements:e})=>e.reduce((i,s)=>i.concat(s,...s.children),[t])}),events:{name:"loadingdone",el:()=>document.fonts,handler(){this.$emit("resize")}},update:{read(){return{rows:(this.row?ws(this.elements):[this.elements]).map(rh)}},write({rows:t}){for(const{heights:e,elements:i}of t)i.forEach((s,n)=>h(s,"minHeight",e[n]))},events:["resize"]}};function rh(t){if(t.length<2)return{heights:[""],elements:t};let e=t.map(ah);const i=Math.max(...e);return{heights:t.map((s,n)=>e[n].toFixed(2)===i.toFixed(2)?"":i),elements:t}}function ah(t){const e=oi(t.style,["display","minHeight"]);q(t)||h(t,"display","block","important"),h(t,"minHeight","");const i=g(t).height-ge(t,"height","content-box");return h(t,e),i}var lh={args:"target",props:{target:String},data:{target:""},computed:{target:{get:({target:t},e)=>et(t,e),observe:({target:t})=>t}},observe:dt({target:({target:t})=>t}),update:{read(){return this.target?{height:this.target.offsetHeight}:!1},write({height:t}){h(this.$el,"minHeight",t)},events:["resize"]}},hh={props:{expand:Boolean,offsetTop:Boolean,offsetBottom:Boolean,min:Number,property:String},data:{expand:!1,offsetTop:!1,offsetBottom:!1,min:0,property:"min-height"},observe:[bs({filter:({expand:t})=>t}),dt({target:({$el:t})=>Xt(t)})],update:{read(){if(!q(this.$el))return!1;let t="";const e=ge(this.$el,"height","content-box"),{body:i,scrollingElement:s}=document,n=Bt(this.$el),{height:o}=at(n===i?s:n),r=s===n||i===n;if(t=`calc(${r?"100vh":`${o}px`}`,this.expand){const a=g(n).height-g(this.$el).height;t+=` - ${a}px`}else{if(this.offsetTop)if(r){const a=this.offsetTop===!0?this.$el:et(this.offsetTop,this.$el),{top:l}=T(a);t+=l>0&&l{if(!this._connected)return;const e=Ph(t,this.$el);return this.svgEl&&e!==this.svgEl&&Q(this.svgEl),_h.call(this,e,t),this.svgEl=e},A)},disconnected(){this.svg.then(t=>{this._connected||(Vi(this.$el)&&(this.$el.hidden=!1),Q(t),this.svgEl=null)}),this.svg=null},methods:{async getSvg(){}}};function Ph(t,e){if(Vi(e)||F(e,"canvas")){e.hidden=!0;const s=e.nextElementSibling;return Jo(t,s)?s:gi(e,t)}const i=e.lastElementChild;return Jo(t,i)?i:W(e,t)}function Jo(t,e){return F(t,"svg")&&F(e,"svg")&&t.innerHTML===e.innerHTML}function _h(t,e){const i=["width","height"];let s=i.map(o=>this[o]);s.some(o=>o)||(s=i.map(o=>k(e,o)));const n=k(e,"viewBox");n&&!s.some(o=>o)&&(s=n.split(" ").slice(2)),s.forEach((o,r)=>k(t,i[r],S(o)*this.ratio||null))}function Ko(t,e){return e&&v(t,"/g,Oh=ct(function(t){const e={};let i;for(;i=Ah.exec(t);)e[i[3]]=``;return e}),zi={spinner:Th,totop:Ch,marker:fh,"close-icon":ch,"close-large":uh,"drop-parent-icon":dh,"nav-parent-icon":gh,"nav-parent-icon-large":ph,"navbar-parent-icon":mh,"navbar-toggle-icon":vh,"overlay-icon":bh,"pagination-next":wh,"pagination-previous":xh,"search-icon":Go,"search-medium":yh,"search-large":$h,"search-toggle-icon":Go,"slidenav-next":Sh,"slidenav-next-large":kh,"slidenav-previous":Eh,"slidenav-previous-large":Ih},zs={install:jh,mixins:[Xo],args:"icon",props:{icon:String},isIcon:!0,beforeConnect(){I(this.$el,"uk-icon")},async connected(){const t=await this.svg;t&&(t.ariaHidden=!0)},methods:{async getSvg(){const t=qh(this.icon);if(!t)throw"Icon not found.";return t}}},ie={args:!1,extends:zs,data:t=>({icon:Ft(t.constructor.options.name)}),beforeConnect(){I(this.$el,this.$options.id)}},Mh={extends:ie,beforeConnect(){const t=this.$props.icon;this.icon=this.$el.closest(".uk-nav-primary")?`${t}-large`:t}},Dh={extends:ie,mixins:[Ei],i18n:{toggle:"Open Search",submit:"Submit Search"},beforeConnect(){const t=$(this.$el,"uk-search-toggle")||$(this.$el,"uk-navbar-toggle");if(this.icon=t?"search-toggle-icon":$(this.$el,"uk-search-icon")&&this.$el.closest(".uk-search-large")?"search-large":this.$el.closest(".uk-search-medium")?"search-medium":this.$props.icon,!Pt(this.$el,"aria-label"))if(t)this.$el.ariaLabel=this.t("toggle");else{const e=this.$el.closest("a,button");e&&(e.ariaLabel=this.t("submit"))}}},Bh={extends:ie,beforeConnect(){this.$el.role="status"},methods:{async getSvg(){const t=await zs.methods.getSvg.call(this);return this.ratio!==1&&h(x("circle",t),"strokeWidth",1/this.ratio),t}}},se={extends:ie,mixins:[Ei],beforeConnect(){const t=this.$el.closest("a,button");k(t,"role",this.role!==null&&F(t,"a")?"button":this.role);const e=this.t("label");e&&!Pt(t,"aria-label")&&k(t,"aria-label",e)}},Zo={extends:se,beforeConnect(){I(this.$el,"uk-slidenav");const t=this.$props.icon;this.icon=$(this.$el,"uk-slidenav-large")?`${t}-large`:t}},Nh={extends:se,i18n:{label:"Open menu"},beforeConnect(){const t=this.$el.closest("a,button");t&&(t.ariaExpanded=!1)}},zh={extends:se,i18n:{label:"Close"},beforeConnect(){this.icon=`close-${$(this.$el,"uk-close-large")?"large":"icon"}`}},Fh={extends:se,i18n:{label:"Open"}},Hh={extends:se,i18n:{label:"Back to top"}},Lh={extends:se,i18n:{label:"Next page"},data:{role:null}},Wh={extends:se,i18n:{label:"Previous page"},data:{role:null}},Fi={};function jh(t){t.icon.add=(e,i)=>{const s=H(e)?{[e]:i}:e;he(s,(n,o)=>{zi[o]=n,delete Fi[o]}),t._initialized&&Mt(document.body,n=>he(t.getComponents(n),o=>{o.$options.isIcon&&o.icon in s&&o.$reset()}))}}const Rh={twitter:"x"};function qh(t){return t=Rh[t]||t,zi[t]?(Fi[t]||(Fi[t]=Ko(zi[Uh(t)]||zi[t])),Fi[t].cloneNode(!0)):null}function Uh(t){return U?Ri(Ri(t,"left","right"),"previous","next"):t}var Vh={props:{target:String,selActive:String},data:{target:!1,selActive:!1},connected(){this.isIntersecting=0},computed:{target:({target:t},e)=>t?D(t,e):e},watch:{target:{handler(){queueMicrotask(()=>this.$reset())},immediate:!1}},observe:[be({handler(t){this.isIntersecting=t.reduce((e,{isIntersecting:i})=>e+(i?1:this.isIntersecting?-1:0),this.isIntersecting),this.$emit()},target:({target:t})=>t,args:{intersecting:!1}}),Si({target:({target:t})=>t,options:{attributes:!0,attributeFilter:["class"]}}),{target:({target:t})=>t,observe:(t,e)=>{const i=qe([...E(t),document.documentElement],e),s=[w(document,"scroll itemshown itemhidden",e,{passive:!0,capture:!0}),w(document,"show hide transitionstart",n=>(e(),i.observe(n.target))),w(document,"shown hidden transitionend transitioncancel",n=>(e(),i.unobserve(n.target)))];return{observe:i.observe.bind(i),unobserve:i.unobserve.bind(i),disconnect(){i.disconnect(),s.map(n=>n())}}},handler(){this.$emit()}}],update:{read(){if(!this.isIntersecting)return!1;for(const t of E(this.target)){let e=!this.selActive||C(t,this.selActive)?Yh(t):"";e!==!1&&li(t,"uk-light uk-dark",e)}}}};function Yh(t){const e=g(t),i=g(window);if(!ri(e,i))return!1;const{left:s,top:n,height:o,width:r}=e;let a;for(const l of[.25,.5,.75]){const c=t.ownerDocument.elementsFromPoint(Math.max(0,Math.min(s+r*l,i.width-1)),Math.max(0,Math.min(n+o/2,i.height-1)));for(const u of c){if(t.contains(u)||!Gh(u)||u.closest('[class*="-leave"]')&&c.some(f=>u!==f&&C(f,'[class*="-enter"]')))continue;const d=h(u,"--uk-inverse");if(d){if(d===a)return`uk-${d}`;a=d;break}}}return a?`uk-${a}`:""}function Gh(t){if(h(t,"visibility")!=="visible")return!1;for(;t;){if(h(t,"opacity")==="0")return!1;t=O(t)}return!0}var Xh={mixins:[st,Pi],props:{fill:String},data:{fill:"",clsWrapper:"uk-leader-fill",clsHide:"uk-leader-hide",attrFill:"data-fill"},computed:{fill:({fill:t},e)=>t||h(e,"--uk-leader-fill-content")},connected(){[this.wrapper]=es(this.$el,``)},disconnected(){We(this.wrapper.childNodes)},observe:dt(),update:{read(){return{width:Math.trunc(this.$el.offsetWidth/2),fill:this.fill,hide:!this.matchMedia}},write({width:t,fill:e,hide:i}){L(this.wrapper,this.clsHide,i),k(this.wrapper,this.attrFill,new Array(t).join(e))},events:["resize"]}},Jh={install:Kh,mixins:[Ps],data:{clsPage:"uk-modal-page",selPanel:".uk-modal-dialog",selClose:'[class*="uk-modal-close"]'},events:[{name:"fullscreenchange webkitendfullscreen",capture:!0,handler(t){F(t.target,"video")&&this.isToggled()&&!document.fullscreenElement&&this.hide()}},{name:"show",self:!0,handler(){$(this.panel,"uk-margin-auto-vertical")?I(this.$el,"uk-flex"):h(this.$el,"display","block"),tt(this.$el)}},{name:"hidden",self:!0,handler(){h(this.$el,"display",""),_(this.$el,"uk-flex")}}]};function Kh({modal:t}){t.dialog=function(i,s){const n=t(x(`
            ${i}
            `),{stack:!0,role:"alertdialog",...s});return n.show(),w(n.$el,"hidden",async()=>{await Promise.resolve(),n.$destroy(!0)},{self:!0}),n},t.alert=function(i,s){return e(({i18n:n})=>`
            ${H(i)?i:vt(i)}
            `,s)},t.confirm=function(i,s){return e(({i18n:n})=>`
            ${H(i)?i:vt(i)}
            `,s,()=>Promise.reject())},t.prompt=function(i,s,n){const o=e(({i18n:l})=>`
            `,n,()=>null,()=>a.value),{$el:r}=o.dialog,a=x("input",r);return a.value=s||"",w(r,"show",()=>a.select()),o},t.i18n={ok:"Ok",cancel:"Cancel"};function e(i,s,n=A,o=A){s={bgClose:!1,escClose:!0,...s,i18n:{...t.i18n,...s==null?void 0:s.i18n}};const r=t.dialog(i(s),s);return ft(new Promise(a=>{const l=w(r.$el,"hide",()=>a(n()));w(r.$el,"submit","form",c=>{c.preventDefault(),a(o(r)),l(),r.hide()})}),{dialog:r})}}var Zh={extends:Lo,data:{targets:"> .uk-parent",toggle:"> a",content:"> ul"}};const Fs="uk-navbar-transparent";var Qh={extends:Uo,props:{dropbarTransparentMode:Boolean},data:{delayShow:200,clsDrop:"uk-navbar-dropdown",selNavItem:".uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle",dropbarTransparentMode:!1},computed:{navbarContainer:(t,e)=>e.closest(".uk-navbar-container")},watch:{items(){const t=$(this.$el,"uk-navbar-justify"),e=D(".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right",this.$el);for(const i of e){const s=t?D(".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle",i).length:"";h(i,"flexGrow",s)}}},events:[{name:"show",el:({dropContainer:t})=>t,handler({target:t}){this.getTransparentMode(t)==="remove"&&$(this.navbarContainer,Fs)&&(_(this.navbarContainer,Fs),this._transparent=!0)}},{name:"hide",el:({dropContainer:t})=>t,async handler(){await tc(),this._transparent&&(!Y||!this.dropContainer.contains(Y.$el))&&(I(this.navbarContainer,Fs),this._transparent=null)}}],methods:{getTransparentMode(t){if(!this.navbarContainer)return;if(this.dropbar&&this.isDropbarDrop(t))return this.dropbarTransparentMode;const e=this.getDropdown(t);if(e&&$(t,"uk-dropbar"))return e.inset?"behind":"remove"},getDropbarOffset(t){const{top:e,height:i}=T(this.navbarContainer);return e+(this.dropbarTransparentMode==="behind"?0:i+t)}}};function tc(){return new Promise(t=>setTimeout(t))}var ec={mixins:[Ps],args:"mode",props:{mode:String,flip:Boolean,overlay:Boolean,swiping:Boolean},data:{mode:"slide",flip:!1,overlay:!1,clsPage:"uk-offcanvas-page",clsContainer:"uk-offcanvas-container",selPanel:".uk-offcanvas-bar",clsFlip:"uk-offcanvas-flip",clsContainerAnimation:"uk-offcanvas-container-animation",clsSidebarAnimation:"uk-offcanvas-bar-animation",clsMode:"uk-offcanvas",clsOverlay:"uk-offcanvas-overlay",selClose:".uk-offcanvas-close",container:!1,swiping:!0},computed:{clsFlip:({flip:t,clsFlip:e})=>t?e:"",clsOverlay:({overlay:t,clsOverlay:e})=>t?e:"",clsMode:({mode:t,clsMode:e})=>`${e}-${t}`,clsSidebarAnimation:({mode:t,clsSidebarAnimation:e})=>t==="none"||t==="reveal"?"":e,clsContainerAnimation:({mode:t,clsContainerAnimation:e})=>t!=="push"&&t!=="reveal"?"":e,transitionElement({mode:t}){return t==="reveal"?O(this.panel):this.panel}},observe:Pn({filter:({swiping:t})=>t}),update:{read(){this.isToggled()&&!q(this.$el)&&this.hide()},events:["resize"]},events:[{name:"touchmove",self:!0,passive:!1,filter:({overlay:t})=>t,handler(t){t.cancelable&&t.preventDefault()}},{name:"show",self:!0,handler(){this.mode==="reveal"&&!$(O(this.panel),this.clsMode)&&I(Le(this.panel,"
            "),this.clsMode);const{body:t,scrollingElement:e}=document;I(t,this.clsContainer,this.clsFlip),h(t,"touchAction","pan-y pinch-zoom"),h(this.$el,"display","block"),h(this.panel,"maxWidth",e.clientWidth),I(this.$el,this.clsOverlay),I(this.panel,this.clsSidebarAnimation,this.mode==="reveal"?"":this.clsMode),tt(t),I(t,this.clsContainerAnimation),this.clsContainerAnimation&&ic()}},{name:"hide",self:!0,handler(){_(document.body,this.clsContainerAnimation),h(document.body,"touchAction","")}},{name:"hidden",self:!0,handler(){this.clsContainerAnimation&&sc(),this.mode==="reveal"&&$(O(this.panel),this.clsMode)&&We(this.panel),_(this.panel,this.clsSidebarAnimation,this.clsMode),_(this.$el,this.clsOverlay),h(this.$el,"display",""),h(this.panel,"maxWidth",""),_(document.body,this.clsContainer,this.clsFlip)}},{name:"swipeLeft swipeRight",handler(t){this.isToggled()&&oe(t.type,"Left")^this.flip&&this.hide()}}]};function ic(){Qo().content+=",user-scalable=0"}function sc(){const t=Qo();t.content=t.content.replace(/,user-scalable=0$/,"")}function Qo(){return x('meta[name="viewport"]',document.head)||W(document.head,'')}var nc={mixins:[st],props:{selContainer:String,selContent:String,minHeight:Number},data:{selContainer:".uk-modal",selContent:".uk-modal-dialog",minHeight:150},computed:{container:({selContainer:t},e)=>e.closest(t),content:({selContent:t},e)=>e.closest(t)},observe:dt({target:({container:t,content:e})=>[t,e]}),update:{read(){return!this.content||!this.container||!q(this.$el)?!1:{max:Math.max(this.minHeight,tt(this.container)-(g(this.content).height-tt(this.$el)))}},write({max:t}){h(this.$el,{minHeight:this.minHeight,maxHeight:t})},events:["resize"]}},oc={props:["width","height"],connected(){I(this.$el,"uk-responsive-width"),h(this.$el,"aspectRatio",`${this.width}/${this.height}`)}},rc={props:{offset:Number},data:{offset:0},connected(){ac(this)},disconnected(){lc(this)},methods:{async scrollTo(t){t=t&&x(t)||document.body,m(this.$el,"beforescroll",[this,t])&&(await bn(t,{offset:this.offset}),m(this.$el,"scrolled",[this,t]))}}};const ii=new Set;function ac(t){ii.size||w(document,"click",tr),ii.add(t)}function lc(t){ii.delete(t),ii.size||Yt(document,"click",tr)}function tr(t){if(!t.defaultPrevented)for(const e of ii)e.$el.contains(t.target)&&Vt(e.$el)&&(t.preventDefault(),window.location.href!==e.$el.href&&window.history.pushState({},"",e.$el.href),e.scrollTo(ui(e.$el)))}const Hs="uk-scrollspy-inview";var hc={args:"cls",props:{cls:String,target:String,hidden:Boolean,margin:String,repeat:Boolean,delay:Number},data:()=>({cls:"",target:!1,hidden:!0,margin:"-1px",repeat:!1,delay:0}),computed:{elements:({target:t},e)=>t?D(t,e):[e]},watch:{elements(t){this.hidden&&h(Ne(t,`:not(.${Hs})`),"opacity",0)}},connected(){this.elementData=new Map},disconnected(){for(const[t,e]of this.elementData.entries())_(t,Hs,(e==null?void 0:e.cls)||"");delete this.elementData},observe:be({target:({elements:t})=>t,handler(t){const e=this.elementData;for(const{target:i,isIntersecting:s}of t){e.has(i)||e.set(i,{cls:Z(i,"uk-scrollspy-class")||this.cls});const n=e.get(i);!this.repeat&&n.show||(n.show=s)}this.$emit()},options:({margin:t})=>({rootMargin:t}),args:{intersecting:!1}}),update:[{write(t){for(const[e,i]of this.elementData.entries())i.show&&!i.inview&&!i.queued?(i.queued=!0,t.promise=(t.promise||Promise.resolve()).then(()=>new Promise(s=>setTimeout(s,this.delay))).then(()=>{this.toggle(e,!0),setTimeout(()=>{i.queued=!1,this.$emit()},300)})):!i.show&&i.inview&&!i.queued&&this.repeat&&this.toggle(e,!1)}}],methods:{toggle(t,e){var i,s;const n=(i=this.elementData)==null?void 0:i.get(t);if(!n)return;(s=n.off)==null||s.call(n),h(t,"opacity",!e&&this.hidden?0:""),L(t,Hs,e),L(t,n.cls);let o;if(o=n.cls.match(/\buk-animation-[\w-]+/g)){const r=()=>_(t,o);e?n.off=z(t,"animationcancel animationend",r,{self:!0}):r()}m(t,e?"inview":"outview"),n.inview=e}}},cc={props:{cls:String,closest:Boolean,scroll:Boolean,target:String,offset:Number},data:{cls:"uk-active",closest:!1,scroll:!1,target:'a[href]:not([role="button"])',offset:0},computed:{links:({target:t},e)=>D(t,e).filter(Vt)},watch:{links(t){this.scroll&&this.$create("scroll",t,{offset:this.offset})}},observe:[be(),Ye()],update:[{read(){const t=this.links.filter(ui),e=t.map(ui),{length:i}=e;if(!i||!q(this.$el))return!1;const s=Bt(e,!0),{scrollTop:n,scrollHeight:o}=s,r=at(s),a=o-r.height;let l=!1;if(n>=a)l=i-1;else{const c=this.offset+g(ds()).height+r.height*.1;for(let u=0;u0);u++)l=+u}return{active:l,links:t}},write({active:t,links:e}){const i=e.map(n=>n.closest(this.closest||"*")),s=t!==!1&&!$(i[t],this.cls);this.links.forEach(n=>n.blur());for(let n=0;nt&&x(t,e)||e},connected(){this.start=er(this.start||this.top),this.end=er(this.end||this.bottom),this.placeholder=x("+ .uk-sticky-placeholder",this.$el)||x('
            '),this.isFixed=!1,this.setActive(!1)},beforeDisconnect(){this.isFixed&&(this.hide(),_(this.target,this.clsInactive)),Ws(this.$el),Q(this.placeholder),this.placeholder=null},observe:[bs(),Ye({target:()=>document.scrollingElement}),dt({target:({$el:t})=>[t,Hi(t),document.scrollingElement],handler(t){this.$emit(this._data.resized&&t.some(({target:e})=>e===Hi(this.$el))?"update":"resize"),this._data.resized=!0}})],events:[{name:"load hashchange popstate",el:()=>window,filter:({targetOffset:t})=>t!==!1,handler(){const{scrollingElement:t}=document;!location.hash||t.scrollTop===0||setTimeout(()=>{const e=T(x(location.hash)),i=T(this.$el);this.isFixed&&ri(e,i)&&(t.scrollTop=Math.ceil(e.top-i.height-G(this.targetOffset,"height",this.placeholder)-G(this.offset,"height",this.placeholder)))})}}],update:[{read({height:t,width:e,margin:i,sticky:s},n){if(this.inactive=!this.matchMedia||!q(this.$el)||!this.$el.offsetHeight,this.inactive)return;const o=tt(window),r=Math.max(0,document.scrollingElement.scrollHeight-o);if(!r){this.inactive=!0;return}const a=this.isFixed&&n.has("update");a&&(Rs(this.target),this.hide()),this.active||({height:t,width:e}=g(this.$el),i=h(this.$el,"margin")),a&&this.show();const l=G("100vh","height");let c=this.position;this.overflowFlip&&t>l&&(c=c==="top"?"bottom":"top");const u=this.isFixed?this.placeholder:this.$el;let[d,f]=[this.offset,this.offsetEnd].map(zt=>G(zt,"height",s?this.$el:u));c==="bottom"&&(tT(f).top+(l?Math.min(a,r):a),offsetParentTop:T(f.offsetParent).top,overflowScroll:K(s+K(u,n,o)-K(t,n,o),0,i)}},write(t,e){const i=e.has("scroll"),{initTimestamp:s=0,dir:n,prevDir:o,scroll:r,prevScroll:a=0,top:l,start:c,below:u}=t;if(r<0||r===a&&i||this.showOnUp&&!i&&!this.isFixed)return;const d=Date.now();if((d-s>300||n!==o)&&(t.initScroll=r,t.initTimestamp=d),!(this.showOnUp&&!this.isFixed&&Math.abs(t.initScroll-r)<=30&&Math.abs(a-r)<=10))if(this.inactive||rr&&(Ot.cancel(this.$el),this.hide());return}if(this.animation&&u){if($(this.$el,"uk-animation-leave"))return;Ot.out(this.$el,this.animation).then(()=>this.hide(),A)}else this.hide()}else this.isFixed?this.update():this.animation&&u?(this.show(),Ot.in(this.$el,this.animation).catch(A)):(Rs(this.target),this.show())},events:["resize","resizeViewport","scroll"]}],methods:{show(){this.isFixed=!0,this.update(),this.placeholder.hidden=!1},hide(){const{offset:t,sticky:e}=this._data;this.setActive(!1),_(this.$el,this.clsFixed,this.clsBelow),e?h(this.$el,"top",t):Ws(this.$el),this.placeholder.hidden=!0,this.isFixed=!1},update(){let{width:t,scroll:e=0,overflow:i,overflowScroll:s=0,start:n,end:o,offset:r,offsetParentTop:a,sticky:l,below:c}=this._data;const u=n!==0||e>n;if(!l){let d="fixed";e>o&&(r+=o-a+s-i,d="absolute"),h(this.$el,{position:d,width:t,marginTop:0},"important")}h(this.$el,"top",r-s),this.setActive(u),L(this.$el,this.clsBelow,c),I(this.$el,this.clsFixed)},setActive(t){const e=this.active;this.active=t,t?(li(this.target,this.clsInactive,this.clsActive),e!==t&&m(this.$el,"active")):(li(this.target,this.clsActive,this.clsInactive),e!==t&&(Rs(this.target),m(this.$el,"inactive")))}}};function Ls(t,e,i,s){if(!t)return 0;if(mt(t)||H(t)&&t.match(/^-?\d/))return i+G(t,"height",e,!0);{const n=t===!0?Hi(e):et(t,e);return T(n).bottom-(s&&(n!=null&&n.contains(e))?S(h(n,"paddingBottom"))+S(h(n,"borderBottomWidth")):0)}}function er(t){return t==="true"?!0:t==="false"?!1:t}function Ws(t){h(t,{position:"",top:"",marginTop:"",width:""})}const js="uk-transition-disable";function Rs(t){$(t,js)||(I(t,js),requestAnimationFrame(()=>_(t,js)))}function Hi(t){for(;t=O(t);)if(q(t))return t}var dc={mixins:[Xo],args:"src",props:{src:String,icon:String,attributes:"list",strokeAnimation:Boolean},data:{strokeAnimation:!1},observe:[Si({async handler(){const t=await this.svg;t&&ir.call(this,t)},options:{attributes:!0,attributeFilter:["id","class","style"]}})],async connected(){v(this.src,"#")&&([this.src,this.icon]=this.src.split("#",2));const t=await this.svg;t&&(ir.call(this,t),this.strokeAnimation&&pc(t))},methods:{async getSvg(){return F(this.$el,"img")&&!this.$el.complete&&this.$el.loading==="lazy"&&await new Promise(t=>z(this.$el,"load",t)),Ko(await fc(this.src),this.icon)||Promise.reject("SVG not found.")}}};function ir(t){const{$el:e}=this;I(t,k(e,"class"),"uk-svg");for(let i=0;i{if(t){const e=await fetch(t);if(e.headers.get("Content-Type")==="image/svg+xml")return e.text()}return Promise.reject()});function pc(t){const e=go(t);e&&h(t,"--uk-animation-stroke",e)}const qs=".uk-disabled *, .uk-disabled, [disabled]";var sr={mixins:[Kt],args:"connect",props:{connect:String,toggle:String,itemNav:String,active:Number,followFocus:Boolean,swiping:Boolean},data:{connect:"~.uk-switcher",toggle:"> * > :first-child",itemNav:!1,active:0,cls:"uk-active",attrItem:"uk-switcher-item",selVertical:".uk-nav",followFocus:!1,swiping:!0},computed:{connects:{get:({connect:t},e)=>ze(t,e),observe:({connect:t})=>t},connectChildren(){return this.connects.map(t=>N(t)).flat()},toggles:({toggle:t},e)=>D(t,e),children(t,e){return N(e).filter(i=>this.toggles.some(s=>i.contains(s)))}},watch:{connects(t){this.swiping&&h(t,"touchAction","pan-y pinch-zoom"),this.$emit()},connectChildren(){let t=Math.max(0,this.index());for(const e of this.connects)N(e).forEach((i,s)=>L(i,this.cls,s===t));this.$emit()},toggles(t){this.$emit();const e=this.index();this.show(~e?e:t[this.active]||t[0])}},connected(){this.$el.role="tablist"},observe:[Ii({targets:({connectChildren:t})=>t}),Pn({target:({connects:t})=>t,filter:({swiping:t})=>t})],events:[{name:"click keydown",delegate:({toggle:t})=>t,handler(t){!C(t.current,qs)&&(t.type==="click"||t.keyCode===B.SPACE)&&(Et(t),this.show(t.current))}},{name:"keydown",delegate:({toggle:t})=>t,handler(t){const{current:e,keyCode:i}=t,s=C(this.$el,this.selVertical);let n=i===B.HOME?0:i===B.END?"last":i===B.LEFT&&!s||i===B.UP&&s?"previous":i===B.RIGHT&&!s||i===B.DOWN&&s?"next":-1;if(~n){t.preventDefault();const o=this.toggles.filter(a=>!C(a,qs)),r=o[rt(n,o,o.indexOf(e))];r.focus(),this.followFocus&&this.show(r)}}},{name:"click",el:({$el:t,connects:e,itemNav:i})=>e.concat(i?ze(i,t):[]),delegate:({attrItem:t})=>`[${t}],[data-${t}]`,handler(t){t.target.closest("a,button")&&(Et(t),this.show(Z(t.current,this.attrItem)))}},{name:"swipeRight swipeLeft",filter:({swiping:t})=>t,el:({connects:t})=>t,handler({type:t}){this.show(oe(t,"Left")?"next":"previous")}}],update(){var t;for(const e of this.connects)F(e,"ul")&&(e.role="presentation");k(N(this.$el),"role","presentation");for(const e in this.toggles){const i=this.toggles[e],s=(t=this.connects[0])==null?void 0:t.children[e];i.role="tab",s&&(i.id=te(this,i),s.id=te(this,s),i.ariaControls=s.id,k(s,{role:"tabpanel","aria-labelledby":i.id}))}k(this.$el,"aria-orientation",C(this.$el,this.selVertical)?"vertical":null)},methods:{index(){return xt(this.children,t=>$(t,this.cls))},show(t){const e=this.toggles.filter(r=>!C(r,qs)),i=this.index(),s=rt(!Pe(t)||v(e,t)?t:0,e,rt(this.toggles[i],e)),n=rt(e[s],this.toggles);this.children.forEach((r,a)=>{L(r,this.cls,n===a),k(this.toggles[a],{"aria-selected":n===a,tabindex:n===a?null:-1})});const o=i>=0&&i!==s;this.connects.forEach(async({children:r})=>{const a=re(r).filter((l,c)=>c!==n&&$(l,this.cls));await this.toggleElement(a,!1,o)&&await this.toggleElement(r[n],!0,o)})}}},gc={mixins:[st],extends:sr,props:{media:Boolean},data:{media:960,attrItem:"uk-tab-item",selVertical:".uk-tab-left,.uk-tab-right"},connected(){const t=$(this.$el,"uk-tab-left")?"uk-tab-left":$(this.$el,"uk-tab-right")?"uk-tab-right":!1;t&&this.$create("toggle",this.$el,{cls:t,mode:"media",media:this.media})}};const mc=13,vc=32;var bc={mixins:[Pi,Kt],args:"target",props:{href:String,target:null,mode:"list",queued:Boolean},data:{href:!1,target:!1,mode:"click",queued:!0},computed:{target:{get:({target:t},e)=>(t=ze(t||e.hash,e),t.length?t:[e]),observe:({target:t})=>t}},connected(){v(this.mode,"media")||(Be(this.$el)||(this.$el.tabIndex=0),!this.cls&&F(this.$el,"a")&&(this.$el.role="button"))},observe:Ii({targets:({target:t})=>t}),events:[{name:ut,filter:({mode:t})=>v(t,"hover"),handler(t){this._preventClick=null,!(!pt(t)||le(this._showState)||this.$el.disabled)&&(m(this.$el,"focus"),z(document,ut,()=>m(this.$el,"blur"),!0,e=>!this.$el.contains(e.target)),v(this.mode,"click")&&(this._preventClick=!0))}},{name:`mouseenter mouseleave ${At} ${Ut} focus blur`,filter:({mode:t})=>v(t,"hover"),handler(t){if(pt(t)||this.$el.disabled||document.readyState==="loading")return;const e=v(["mouseenter",At,"focus"],t.type),i=this.isToggled(this.target);if(!e&&(!le(this._showState)||t.type!=="blur"&&C(this.$el,":focus")||t.type==="blur"&&C(this.$el,":hover"))){i===this._showState&&(this._showState=null);return}e&&le(this._showState)&&i!==this._showState||(this._showState=e?i:null,this.toggle(`toggle${e?"show":"hide"}`))}},{name:"keydown",filter:({$el:t,mode:e})=>v(e,"click")&&!F(t,"input"),handler(t){(t.keyCode===vc||t.keyCode===mc)&&(t.preventDefault(),this.$el.click())}},{name:"click",filter:({mode:t})=>["click","hover"].some(e=>v(t,e)),handler(t){if(t.defaultPrevented)return;const e=t.target.closest("a[href]"),i=Vt(e)&&(!e.hash||C(this.target,e.hash));(this._preventClick||i||e&&!this.isToggled(this.target))&&t.preventDefault(),!this._preventClick&&v(this.mode,"click")&&(!e||i||t.defaultPrevented)&&this.toggle()}},{name:"mediachange",filter:({mode:t})=>v(t,"media"),el:({target:t})=>t,handler(t,e){e.matches^this.isToggled(this.target)&&this.toggle()}}],methods:{async toggle(t){if(!m(this.target,t||"toggle",[this]))return;if(Pt(this.$el,"aria-expanded")&&(this.$el.ariaExpanded=!this.isToggled(this.target)),!this.queued)return this.toggleElement(this.target);const e=this.target.filter(s=>$(s,this.clsLeave));if(e.length){for(const s of this.target){const n=v(e,s);this.toggleElement(s,n,n)}return}const i=this.target.filter(this.isToggled);await this.toggleElement(i,!1)&&await this.toggleElement(this.target.filter(s=>!v(i,s)),!0)}}},wc=Object.freeze({__proto__:null,Accordion:Lo,Alert:Rl,Close:zh,Cover:Vl,Drop:Ro,DropParentIcon:ie,Dropdown:Ro,Dropnav:Uo,FormCustom:th,Grid:eh,HeightMatch:oh,HeightPlaceholder:lh,HeightViewport:hh,Icon:zs,Img:ua,Inverse:Vh,Leader:Xh,Margin:_n,Marker:Fh,Modal:Jh,Nav:Zh,NavParentIcon:Mh,Navbar:Qh,NavbarParentIcon:ie,NavbarToggleIcon:Nh,Offcanvas:ec,OverflowAuto:nc,OverlayIcon:ie,PaginationNext:Lh,PaginationPrevious:Wh,Responsive:oc,Scroll:rc,Scrollspy:hc,ScrollspyNav:cc,SearchIcon:Dh,SlidenavNext:Zo,SlidenavPrevious:Zo,Spinner:Bh,Sticky:uc,Svg:dc,Switcher:sr,Tab:gc,Toggle:bc,Totop:Hh,Video:Wo});return he(wc,(t,e)=>ht.component(e,t)),Fl(ht),he(zl,(t,e)=>ht.component(e,t)),ht}); diff --git a/web/templates/base.html b/web/templates/base.html index b1f1f8a..8426f82 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -2,7 +2,11 @@ + Beacon + + + diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index b56e946..1bf8586 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -6,10 +6,10 @@ {% block content %}
            -
            Slot 1
            -
            Slot 2
            -
            Tables/Kanban (logs joueurs) ?
            -
            Jauges ?
            +
            RAM: Heap (free/used/max), Non-heap (free/used/max)
            +
            CPU (architecture/usage/JVM cores)
            +
            I/O (W/R speeds)
            +
            Players / worlds (2 tabs)
            -- GitLab From 744e28a43a847fade02125195e8e24de41f3e8b5 Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Fri, 22 Aug 2025 15:04:24 +0200 Subject: [PATCH 004/139] =?UTF-8?q?modifications=20RISQU=C3=89ES=20->=20la?= =?UTF-8?q?yout=20bien=20meilleur=20et=20tabs=20fonctionnels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/static/style.css | 50 ++++++++++++++++++++++++++++++++++-- web/templates/dashboard.html | 45 +++++++++++++++++++++++++++----- 2 files changed, 87 insertions(+), 8 deletions(-) diff --git a/web/static/style.css b/web/static/style.css index b176975..c4102cd 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -25,7 +25,6 @@ h1 h5 { font-weight: regular; - margin: 0px; margin-bottom: 20px; padding: 0px; text-transform: uppercase; @@ -36,6 +35,11 @@ p line-height: 24px; } +.center-text +{ + text-align: center; +} + .data-column { font-weight: bold; @@ -69,6 +73,42 @@ p margin-bottom: 30px; } +.tabs +{ + overflow: hidden; +} +.tab button +{ + background-color: #333; + border: none; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + color: white; + cursor: pointer; + font-weight: bold; + outline: none; + padding: 14px 16px; + transition: 0.3s; +} +.tab button:hover +{ + background-color: #ddd; + color: #222; +} +.tab button.active +{ + background-color: #22c6d1; +} + +.tabcontent +{ + border-top: none; + display: none; + padding: 6px 12px; +} + #dashboard-main-section { background-color: inherit; @@ -118,7 +158,6 @@ p overflow: hidden; position: absolute; right: 0px; - text-align: center; width: var(--one_third); } @@ -139,4 +178,11 @@ p margin-right: auto; margin-top: 0px; width: var(--icon_size); +} + +#versions +{ + margin-top: 36px; + padding-left: 10%; + text-align: left !important; } \ No newline at end of file diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 2fa0e5f..2dbcb02 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -9,13 +9,24 @@
            RAM: Heap (free/used/max), Non-heap (free/used/max)
            CPU (architecture/usage/JVM cores)
            I/O (W/R speeds)
            -
            Players / worlds (2 tabs)
            +
            + + +
            +

            Players

            +

            Players view

            +
            +
            +

            Worlds

            +

            Worlds view

            +
            +
            + + {% endblock %} -- GitLab From b117cf4ef866673593dce64825665df78d9b49dd Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Fri, 22 Aug 2025 15:10:42 +0200 Subject: [PATCH 005/139] =?UTF-8?q?modification=20peu=20risqu=C3=A9e=20du?= =?UTF-8?q?=20gitignore=20pour=20.DS=5FStore=20qui=20me=20bully?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/.gitignore => .gitignore | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename web/.gitignore => .gitignore (100%) diff --git a/web/.gitignore b/.gitignore similarity index 100% rename from web/.gitignore rename to .gitignore -- GitLab From 6a9ac349692ea1f627ff3a73ae99b94b7e83d40e Mon Sep 17 00:00:00 2001 From: Ilian Topalov Date: Fri, 22 Aug 2025 20:52:32 +0000 Subject: [PATCH 006/139] Resolve "DOC - Clarify metrics" --- docs/report/metrics.md | 71 ++++++++++++++++++++++++++++++++++++++++ docs/report/metrics.png | Bin 0 -> 154944 bytes 2 files changed, 71 insertions(+) create mode 100644 docs/report/metrics.md create mode 100644 docs/report/metrics.png diff --git a/docs/report/metrics.md b/docs/report/metrics.md new file mode 100644 index 0000000..aa2791f --- /dev/null +++ b/docs/report/metrics.md @@ -0,0 +1,71 @@ +# Metrics +This document lists the various metrics that are to be collected from the beacon mod. + +### Category +Each metric is categorised as follows : +- Host Metrics, technical data from the host machine (hardware&software metrics) +- Server Metrics, minecraft specific metrics and information +- Mod Metrics, mod specific information + +### Visualisation +Each metric has a suggested visualisation in order to be able to imagine the layout and final presentation of the web ui. + +### Endpoint +The following endpoints are used to get data from the mod: +- `/heartbeat`, very light http request returning a 200 ok code if the server is reachable +- `/public`, light http request returning basic server information +- `/socket`, complex http request returning more custom metrics and information + +### Aggregation +Metrics are either collected per server or for all the servers at the same time... +It is important to note that for a global metric, data from all the servers has to be collected and aggregated, generating many calls to the endpoints at once. +This can reduce the website's responsiveness and should be done with caution or avoided. + +### Iteration +The iteration for which the metric is planned. + +## List of metrics +| **Category** | **Metric** | **Visualisation** | **Endpoint** | **Aggregation** | **Iteration** | **Comment** | +|--------------------|--------------------------------------|--------------------------------------------------------------|--------------|-----------------|---------------|---------------------------------------| +| | # servers up/total of servers | Numerical or gauge horizontal | `/heartbeat` | Global | 2 | ✔️ | +| | Server status (up/down) | Icon (point green/red or gray) | `/heartbeat` | Server | 1 | ✔️ | +| | List servers | UIcards (Kanban) filtrable on attr (version, gamemode, etc.) | `/heartbeat` | Global | 2 | ✔️ | +| **Mod Metrics** | Mod Version | Text (+ Icons/Tags) | ? | Server | 2 | ✔️ | +| **Mod Metrics** | Server ID | Text (+ Icons/Tags) | `/public` | Server | 2 | ✔️ | +| **Mod Metrics** | Server name | Text (+ Icons/Tags) | `/public` | Server | 1 | ✔️ | +| **Mod Metrics** | Server IP | Text (+ Icons/Tags) | `/public` | Server | 1 | ✔️ | +| **Host Metrics** | OS name & version | Text (+ Icons/Tags) | `/socket` | Server | 2 | ✔️ | +| **Host Metrics** | CPU arch | Text (+ Icons/Tags) | `/socket` | Server | 2 | ✔️ | +| **Host Metrics** | JVM cores (# CPU assigned) | Numerical | `/socket` | Global + Server | 2 | ✔️ | +| **Host Metrics** | CPU usage [%] | Numerical (%) + gauge / Dynamic timeseries | `/socket` | Global + Server | 2 | ⚠️ Approximative (idle diff required) | +| **Host Metrics** | RAM Heap max (# RAM assigned) | Numerical | `/socket` | Global + Server | 1 | ✔️ | +| **Host Metrics** | RAM Heap usage [%]/[GB] | Numerical (%) + gauge / Dynamic timeseries | `/socket` | Global + Server | 1 | ⚠️ Approximative (idle diff required) | +| **Host Metrics** | RAM Non-heap max (# RAM assigned) | Numerical | `/socket` | Global + Server | 1 | ✔️ | +| **Host Metrics** | RAM Non-heap usage [%]/[GB] | Numerical (%) + gauge / Dynamic timeseries | `/socket` | Global + Server | 1 | ⚠️ Approximative (idle diff required) | +| **Host Metrics** | I/O Write speed delay | Numerical + gauge (vs predefined max) / Dynamic timeseries | `/socket` | Global + Server | 2 | ⚠️ Approximative mais faisable | +| **Host Metrics** | I/O Read speed delay | Numerical + gauge (vs predefined max) / Dynamic timeseries | `/socket` | Global + Server | 2 | ⚠️ Approximative mais faisable | +| **Host Metrics** | Power consumption [Watt] | Numerical (%) + gauge / Dynamic timeseries | - | Global + Server | - | ❌ Too low level for Java API | +| **Host Metrics** | Storage (GB) | Numerical (%) + gauge / Dynamic timeseries | - | Global + Server | - | ❌ Too low level for Java API | +| **Host Metrics** | Bandwidth (b) | Numerical (%) + gauge / Dynamic timeseries | - | Global + Server | - | ❌ Too low level for Java API | +| **Host Metrics** | JRE version | Text (+ Icons/Tags) | `/socket` | Server | 2 | ✔️ | +| **Host Metrics** | Launch args | Text (+ Icons/Tags), Tooltip | `/socket` | Server | 2 | ✔️ | +| **Server Metrics** | Server type (vanilla/fabric/forge/…) | Text (+ Icons/Tags) | `/public` | Server | 1 | ✔️ | +| **Server Metrics** | Minecraft version | Text (+ Icons/Tags) | `/public` | Server | 1 | ✔️ | +| **Server Metrics** | Online/Max player # | Numerical + gauge (vs max players) | `/public` | Global + Server | 2 | ✔️ | +| **Server Metrics** | Uptime | Numerical | `/socket` | Global + Server | 2 | ✔️ | +| **Server Metrics** | MOTD (description) | Text (+ Icons/Tags) | `/public` | Server | 1 | ✔️ | +| **Server Metrics** | Players[] (connected / unconnected) | UIcards (Kanban) filtrable on GUID | `/socket` | Global + Server | 2 | ✔️ (test unconnected) | +| **Server Metrics** | # Mondes | Numerical | `/socket` | Global + Server | 2 | ✔️ | +| **Server Metrics** | Worlds[] (properties & gamerules) | Table / Kanban (filtrable) | `/socket` | Server | 2 | ✔️ | +| | History of players | - | - | Global + Server | - | ❌ Impossible without a DB | +| | Logs | Table / Text | `/socket` | Server | 1 | ✔️ | +| | NameMC (attribute or link) | Link / attribute | - | Global + Server | 2 | ⚠️ Possible only if online server | + +## Collected Data +The beacon mod collects the data in the following json format : +![metrics.png](metrics.png) + +For each json sent (root), there is an associated timestamp enabling the webserver to keep track of the metrics and generate timeseries and histograms along the time axis. + +### Historisation +Storing the collected data in a database would enable more complex visualisations. A 4th iteration of the project could add this feature in its further development. diff --git a/docs/report/metrics.png b/docs/report/metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9d641ebe04e3352b411b01d1362504d9242245 GIT binary patch literal 154944 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 h4%AjFY$jV1k_No><6uFt4D`N2A_3PsgYxD2z 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𝔛GFBxXzrMa+?oqX~=xN9-p%X5LgoK0^t!wi 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

            KVxJhtSNij7(j^^q8>_0z= zlo;&YpxVEsd&>@&7^|29^Jo z#hR;{*||LuO7i`0UhDhqf5c_O$q@n1A3WzzI;4Eq_x;QY3E8|)t#jU4T3E!IynR+; zqNevLVbR>bne9Jj7$@)6-S2hmrhmgDrQgRDV!4^>>kePFJG3-wQS74WDqew?7b%wq zSFE40_lBs)md&Tr^V8!s3>EGC7u~2-^J;pT-4yM_WcN|8bCO4C;)jn*E1}7Ef;8ui z&e%PB_d0KxJJ)&2$?cUHpVF074L{0TSGTu!c5;6I@V~`n_l6rSCnmHUIl^(d&C>j> z(A#q=JKX2<<$R0`$xE3Q{L80sVz66R8KNivtztOH`N#f Date: Sun, 24 Aug 2025 14:39:37 +0200 Subject: [PATCH 007/139] feat: Horizontal gauge indicators prototype --- web/templates/base.html | 17 +++++++++++- web/templates/dashboard.html | 42 +++++++++++++++++++++++++++-- web/templates/horizontal_gauge.html | 26 ++++++++++++++++++ 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 web/templates/horizontal_gauge.html diff --git a/web/templates/base.html b/web/templates/base.html index 78968da..5e8f687 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -4,15 +4,30 @@ Beacon - + + + + + + +

            diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 2dbcb02..cf0fd1f 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -6,8 +6,46 @@ {% block content %}
            -
            RAM: Heap (free/used/max), Non-heap (free/used/max)
            -
            CPU (architecture/usage/JVM cores)
            + +
            +

            RAM - Heap

            + + {% set gauge_id = "heapGauge" %} + {% set used_key = "HEAP_USED" %} + {% set max_key = "HEAP_MAX" %} + {% set label = "Heap Used" %} + {% include "horizontal_gauge.html" %} +

            RAM - Non-Heap

            + + {% set gauge_id = "nonHeapGauge" %} + {% set used_key = "NON_HEAP_USED" %} + {% set max_key = "NON_HEAP_MAX" %} + {% set label = "Non Heap Used" %} + {% include "horizontal_gauge.html" %} +
            + +
            +

            CPU Usage

            + + {% set gauge_id = "cpuGauge" %} + {% set used_key = "CPU_USED" %} + {% set max_key = "CPU_USED" %} + {% set label = "Cpu Used" %} + {% include "horizontal_gauge.html" %} +
            I/O (W/R speeds)
            diff --git a/web/templates/horizontal_gauge.html b/web/templates/horizontal_gauge.html new file mode 100644 index 0000000..405c1b5 --- /dev/null +++ b/web/templates/horizontal_gauge.html @@ -0,0 +1,26 @@ + +
            + +
            +
            + + -- GitLab From c91fb26508c7142a05e52771fcfe45e8b6663596 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Sun, 24 Aug 2025 22:32:08 +0200 Subject: [PATCH 008/139] docs: Adding copyright message --- .../me/peteras17/beacon/BeaconCommon.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/BeaconStatus.java | 27 +++++++++++++++++++ .../java/me/peteras17/beacon/Capability.java | 27 +++++++++++++++++++ .../peteras17/beacon/CapabilityManager.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/CommandManager.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/MetricManager.java | 27 +++++++++++++++++++ .../java/me/peteras17/beacon/cmd/Command.java | 27 +++++++++++++++++++ .../peteras17/beacon/cmd/CommonCommands.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/cmd/ExecResult.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/logs/Interceptor.java | 27 +++++++++++++++++++ .../me/peteras17/beacon/metrics/IMetric.java | 27 +++++++++++++++++++ .../beacon/metrics/MemoryMetrics.java | 27 +++++++++++++++++++ .../beacon/metrics/MetricCollection.java | 27 +++++++++++++++++++ .../peteras17/beacon/metrics/MetricGroup.java | 27 +++++++++++++++++++ .../peteras17/beacon/metrics/MetricMap.java | 27 +++++++++++++++++++ .../peteras17/beacon/metrics/MetricNode.java | 27 +++++++++++++++++++ .../peteras17/beacon/metrics/MetricType.java | 27 +++++++++++++++++++ mods/fabric/.idea/copyright/Beacon.xml | 6 +++++ .../.idea/copyright/profiles_settings.xml | 3 +++ .../beacon/fabric/CommandCenter.java | 27 +++++++++++++++++++ .../java/me/peteras17/beacon/fabric/Main.java | 27 +++++++++++++++++++ 21 files changed, 522 insertions(+) create mode 100644 mods/fabric/.idea/copyright/Beacon.xml create mode 100644 mods/fabric/.idea/copyright/profiles_settings.xml diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index c5ccc51..dc04fe0 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 09/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; import io.javalin.http.HttpStatus; diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconStatus.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconStatus.java index b92f239..1f660be 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconStatus.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconStatus.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 09/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; diff --git a/mods/common/src/main/java/me/peteras17/beacon/Capability.java b/mods/common/src/main/java/me/peteras17/beacon/Capability.java index e2df966..e85e38a 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/Capability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/Capability.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; public enum Capability { diff --git a/mods/common/src/main/java/me/peteras17/beacon/CapabilityManager.java b/mods/common/src/main/java/me/peteras17/beacon/CapabilityManager.java index 0fd7e9f..05146d5 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/CapabilityManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/CapabilityManager.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; import java.math.BigInteger; diff --git a/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java b/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java index 4262f63..b439249 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 18/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; import me.peteras17.beacon.cmd.Command; diff --git a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java index ae43fde..2e5dbbb 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 09/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java b/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java index 380e077..a04013d 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 18/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.cmd; import java.util.LinkedList; diff --git a/mods/common/src/main/java/me/peteras17/beacon/cmd/CommonCommands.java b/mods/common/src/main/java/me/peteras17/beacon/cmd/CommonCommands.java index 863f35d..4ee53d9 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cmd/CommonCommands.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cmd/CommonCommands.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 18/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.cmd; public class CommonCommands { diff --git a/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java b/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java index f29b063..ef86a36 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 09/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.cmd; import me.peteras17.beacon.BeaconStatus; diff --git a/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java b/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java index 1241fb8..57020e2 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java +++ b/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 11/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.logs; import org.apache.logging.log4j.Level; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java index 1d5ab0a..b16fadd 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java index 2143dbb..ddc3539 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 13/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import java.lang.management.ManagementFactory; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java index 72c84c5..535b6fa 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java index eac2999..aa22927 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java index 01365a2..70d1e6e 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java index a126657..aecf970 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java index 6053a32..f257f72 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 09/07/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.metrics; /** diff --git a/mods/fabric/.idea/copyright/Beacon.xml b/mods/fabric/.idea/copyright/Beacon.xml new file mode 100644 index 0000000..d540fea --- /dev/null +++ b/mods/fabric/.idea/copyright/Beacon.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/mods/fabric/.idea/copyright/profiles_settings.xml b/mods/fabric/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..f666170 --- /dev/null +++ b/mods/fabric/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/CommandCenter.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/CommandCenter.java index dcafe14..39489fc 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/CommandCenter.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/CommandCenter.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 18/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.fabric; import com.mojang.brigadier.CommandDispatcher; diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/Main.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/Main.java index 9c48e07..86261bb 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/Main.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/Main.java @@ -1,3 +1,30 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 22/06/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + package me.peteras17.beacon.fabric; import com.mojang.brigadier.context.CommandContext; -- GitLab From 164fd6852f1f11d5203c8e5f65ccba9ad7eebb15 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Sun, 24 Aug 2025 23:38:34 +0200 Subject: [PATCH 009/139] feat: (#31) Adding dynamic mod version and non-heap stats --- mods/common/build.gradle.kts | 17 +++++++++ .../me/peteras17/beacon/BeaconCommon.java | 20 ++++++++-- .../beacon/metrics/MemoryMetrics.java | 27 ++++++++++++++ .../peteras17/beacon/metrics/MetricType.java | 1 + .../src/main/templates/ModVersion.java.in | 37 +++++++++++++++++++ 5 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 mods/common/src/main/templates/ModVersion.java.in diff --git a/mods/common/build.gradle.kts b/mods/common/build.gradle.kts index ca3ac63..1a52a05 100644 --- a/mods/common/build.gradle.kts +++ b/mods/common/build.gradle.kts @@ -25,6 +25,23 @@ dependencies { testImplementation("org.junit.jupiter:junit-jupiter") } +// Automatically replace version in .java file when compiling +val generatedJavaDir = layout.buildDirectory.dir("generated/sources/java-templates") + +sourceSets["main"].java.srcDir(generatedJavaDir) + +tasks.register("processJavaTemplates") { + from("src/main/templates") + include("**/*.java.in") + into(generatedJavaDir) + expand("version" to project.version) // replace placeholders + rename { it.removeSuffix(".in") } // strip .in -> real .java +} + +tasks.named("compileJava") { + dependsOn("processJavaTemplates") +} + // Create test task tasks.test { useJUnitPlatform() diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index dc04fe0..fb473a1 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -31,6 +31,7 @@ import io.javalin.http.HttpStatus; import me.peteras17.beacon.cmd.ExecResult; import me.peteras17.beacon.metrics.MemoryMetrics; import me.peteras17.beacon.logs.Interceptor; +import me.peteras17.beacon.ModVersion; import java.util.function.Consumer; import io.javalin.Javalin; @@ -45,6 +46,11 @@ import org.apache.logging.log4j.Level; @SuppressWarnings("unused") public final class BeaconCommon { + /** + * Compiled mod's version + */ + public static String VERSION = ModVersion.VERSION; + /** * Is it the first time .beaconStart() is called? */ @@ -134,13 +140,21 @@ public final class BeaconCommon { */ private void createCommonMetrics() { - // Instantiate metric providers - MemoryMetrics memoryMetrics = new MemoryMetrics(); + // Scrape timestamp + _metricsRoot.addMetric(new MetricNode(MetricType.TIMESTAMP, Capability.BASE_METRICS, () -> System.currentTimeMillis() / 1000)); + + // Mod metrics category + MetricGroup modMetrics = new MetricGroup(MetricType.MOD, Capability.BASE_METRICS); + modMetrics.addMetric(new MetricNode(MetricType.MOD_VERSION, Capability.BASE_METRICS, () -> VERSION)); - // Create metric objects + // Memory-related information + MemoryMetrics memoryMetrics = new MemoryMetrics(); _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_FREE, Capability.BASE_METRICS, memoryMetrics::getHeapFree)); _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_USED, Capability.BASE_METRICS, memoryMetrics::getHeapUsed)); _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_MAX, Capability.BASE_METRICS, memoryMetrics::getHeapMax)); + _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_FREE, Capability.BASE_METRICS, memoryMetrics::getNonHeapFree)); + _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_USED, Capability.BASE_METRICS, memoryMetrics::getNonHeapUsed)); + _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_MAX, Capability.BASE_METRICS, memoryMetrics::getNonHeapMax)); } /** diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java index ddc3539..eb7d06a 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java @@ -74,4 +74,31 @@ public class MemoryMetrics { { return _memoryBean.getHeapMemoryUsage().getMax(); } + + /** + * Returns the number of free bytes of non-heap memory + * @return Free bytes + */ + public long getNonHeapFree() + { + return _memoryBean.getNonHeapMemoryUsage().getMax() - _memoryBean.getNonHeapMemoryUsage().getUsed(); + } + + /** + * Returns the number of used bytes of non-heap memory + * @return Used bytes + */ + public long getNonHeapUsed() + { + return _memoryBean.getNonHeapMemoryUsage().getUsed(); + } + + /** + * Returns the maximum number of bytes of heap memory + * @return Maximum bytes + */ + public long getNonHeapMax() + { + return _memoryBean.getNonHeapMemoryUsage().getMax(); + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java index f257f72..003adef 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java @@ -54,6 +54,7 @@ public enum MetricType { PLAYERS, WORLDS, GAME_RULES, + TIMESTAMP, /* * Metric names diff --git a/mods/common/src/main/templates/ModVersion.java.in b/mods/common/src/main/templates/ModVersion.java.in new file mode 100644 index 0000000..eb802e0 --- /dev/null +++ b/mods/common/src/main/templates/ModVersion.java.in @@ -0,0 +1,37 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 24/08/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +package me.peteras17.beacon; + +public class ModVersion { + + /** + * Compiled mod's version + */ + public static final String VERSION = "${version}"; + +} -- GitLab From 52720f45281e423f5cb014ad57d025c087cd580f Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Mon, 25 Aug 2025 16:47:33 +0200 Subject: [PATCH 010/139] (#37) Changed homepage to dashboard. Also created a component folder for templates. --- web/templates/{ => components}/horizontal_gauge.html | 0 web/templates/dashboard.html | 6 +++--- web/templates/homepage.html | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) rename web/templates/{ => components}/horizontal_gauge.html (100%) diff --git a/web/templates/horizontal_gauge.html b/web/templates/components/horizontal_gauge.html similarity index 100% rename from web/templates/horizontal_gauge.html rename to web/templates/components/horizontal_gauge.html diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index cf0fd1f..ffbae78 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -27,14 +27,14 @@ {% set used_key = "HEAP_USED" %} {% set max_key = "HEAP_MAX" %} {% set label = "Heap Used" %} - {% include "horizontal_gauge.html" %} + {% include "components/horizontal_gauge.html" %}

            RAM - Non-Heap

            {% set gauge_id = "nonHeapGauge" %} {% set used_key = "NON_HEAP_USED" %} {% set max_key = "NON_HEAP_MAX" %} {% set label = "Non Heap Used" %} - {% include "horizontal_gauge.html" %} + {% include "components/horizontal_gauge.html" %}
            @@ -44,7 +44,7 @@ {% set used_key = "CPU_USED" %} {% set max_key = "CPU_USED" %} {% set label = "Cpu Used" %} - {% include "horizontal_gauge.html" %} + {% include "components/horizontal_gauge.html" %}
            I/O (W/R speeds)
            diff --git a/web/templates/homepage.html b/web/templates/homepage.html index c32a7af..420a516 100644 --- a/web/templates/homepage.html +++ b/web/templates/homepage.html @@ -1,7 +1,3 @@ {% extends "base.html" %} -{% block title %}{{ super }} - Homepage{% endblock %} - -{% block content %} -

            TODO la transition stylée où on plonge dans la balise

            -{% endblock %} +{% include "dashboard.html" %} \ No newline at end of file -- GitLab From e93f1c6c9d2de13ba61acd76643666034aa39aac Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Mon, 25 Aug 2025 17:09:56 +0200 Subject: [PATCH 011/139] (#37) Changed server class for simpler use in templates. Also reworked Server requests to always catch exception. --- web/config.py | 2 +- web/models/server.py | 45 ++++++++++++++++++++++++------------ web/routes/web.py | 2 +- web/templates/dashboard.html | 8 +++---- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/web/config.py b/web/config.py index 3bf2a1a..913784b 100644 --- a/web/config.py +++ b/web/config.py @@ -1,3 +1,3 @@ from models.server import Server -MINECRAFT_SERVER = Server("http://localhost:25566", "Minecraft Server") +MINECRAFT_SERVER = Server("localhost", 25566, "Minecraft Server", "A Minecraft server") diff --git a/web/models/server.py b/web/models/server.py index 6f3b725..67531af 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -2,9 +2,12 @@ import requests class Server: - def __init__(self, url: str, name: str): - self.url = url + def __init__(self, ip: str, port: int, name: str, description: str): + self.ip = ip + self.port = port + self.url = f"http://{self.ip}:{self.port}" self.name = name + self.description = description # end def def check_status(self) -> bool: @@ -21,6 +24,20 @@ class Server: # end try # end def + def get_response(self, url): + try: + response = requests.get(url) + if response.status_code == 200: + return response, None + else: + return {}, "Failed to retrieve data" + # end if + except requests.RequestException: + return {}, "Failed to communicate with the server" + # end try + + # end def + def get_logs(self) -> tuple[list, str | None]: """ Contact server to get logs. @@ -28,15 +45,14 @@ class Server: list: The logs retrieved from the server. str: An error message if the request fails. """ - response = requests.get(f"{self.url}/logs") - if response.status_code == 200: - # decode bytes to string and split into lines - logs_str = response.content.decode("utf-8") - logs_list = logs_str.splitlines() - return logs_list, None - else: - return [], "Failed to retrieve logs" + logs, error = self.get_response(f"{self.url}/logs") + if error: + return [], error # end if + # decode bytes to string and split into lines + logs_str = logs.content.decode("utf-8") + logs_list = logs_str.splitlines() + return logs_list, None # end def def get_metrics(self) -> tuple[dict, str | None]: @@ -46,12 +62,11 @@ class Server: dict: The metrics retrieved from the server. str: An error message if the request fails. """ - response = requests.get(f"{self.url}/metrics") - if response.status_code == 200: - return response.json(), None - else: - return {}, "Failed to retrieve metrics" + metrics, error = self.get_response(f"{self.url}/metrics") + if error: + return {}, error # end if + return metrics.json(), None # end def def exec_command(self, command: str) -> tuple[str, str | None]: diff --git a/web/routes/web.py b/web/routes/web.py index a1f355f..f2a8ed4 100644 --- a/web/routes/web.py +++ b/web/routes/web.py @@ -10,5 +10,5 @@ def homepage(): logs = get_server_logs(MINECRAFT_SERVER) metrics = get_server_metrics(MINECRAFT_SERVER) - return render_template("homepage.html", heartbeat=heartbeat, logs=logs, metrics=metrics) + return render_template("homepage.html", server=MINECRAFT_SERVER, heartbeat=heartbeat, logs=logs, metrics=metrics) # end def \ No newline at end of file diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index ffbae78..938a7ee 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -61,8 +61,8 @@
            -- GitLab From 0e543b97b5734be54cf59579ac331cf6e0716e2d Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Wed, 27 Aug 2025 16:19:23 +0200 Subject: [PATCH 024/139] uncomment ilian's incudes --- web/templates/dashboard.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index b7f5c46..9936fa2 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -66,17 +66,13 @@

            Players

            -

            Worlds

            -
            -- GitLab From ee486b9b743645bca60ac9fcd9f7de7f933f9a3a Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:00:57 +0200 Subject: [PATCH 025/139] (#49) Clarified Protocol version --- docs/report/protocol.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index ae384e0..aeedee6 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -6,6 +6,10 @@ - The client (Minecraft mod) sends a 128-bit field listing supported cryptographic algorithms. - **Bits 0-1:** Protocol version (00: legacy, 01: current, 10-11: reserved for future versions) + - Legacy stands for our first non-cryptographicly safe version + - Current currently stands for the first version of cryptographicly safe Beacon but can change along the life of this project (later version if crypto requires changes). + - 2 versions are let available for later on. + - Each server will be able to choose the version among existing ones, although Legacy will be highly discouraged. - **Bits 2-33:** Key Exchange Protocols - Bit 2: "None" (no encryption, legacy support, can (and should) be disabled) - Bit 3: RSA-2048 -- GitLab From 23501536ff0a81dc91d699db065c2fe39c4b9cc0 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:02:04 +0200 Subject: [PATCH 026/139] (#49) Clarified purpose of asymmetric and symmetric cryptography --- docs/report/protocol.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index aeedee6..99dff12 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -29,6 +29,8 @@ - **Algorithm Selection:** - If multiple algorithms are supported, the server selects the strongest mutually supported algorithm. (Ranking list based on trusted standards) - Asymmetric key exchange (e.g., Diffie-Hellman, RSA) is used to securely negotiate session keys. These protocols allow both parties to agree on a symmetric key for fast, secure communication (similar to how TLS works). + - Asymmetric cryptography is used for the key exchange due to the nature of public/private keys where symmetric would need to manually pre-share a key if not for the key exchange protocols. + - Symmetric cryptography is used for the general communication due to their superiority in terms of speed. Keys will be generated through the key exchange protocol and will last until closure of the socket. - Multiple algorithms may be supported for key exchange, but only one is chosen per session. - Upon determining the used algorithm, all further communication will be encrypted to prevent attackers from fingerprinting mod versions based on supported features. - Public key length (e.g., 2048-bit, 4096-bit) should also be included as a capability in the handshake, ensuring both sides agree on compatible key sizes for secure exchange. -- GitLab From 68599511918307b707eb855a8a2637d825c64566 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:09:27 +0200 Subject: [PATCH 027/139] (#49) Added trusted standards and a ranking list for currently accepted algorithms. --- docs/report/protocol.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index 99dff12..e6843e2 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -27,7 +27,10 @@ - **Bits 66-127:** Reserved for future cryptographic features - The server performs a bitwise AND to determine mutually supported algorithms. - **Algorithm Selection:** - - If multiple algorithms are supported, the server selects the strongest mutually supported algorithm. (Ranking list based on trusted standards) + - The server performs a bitwise AND to determine mutually supported algorithms. + - If multiple algorithms are supported, the server selects the strongest mutually supported algorithm according to NIST-approved minimums, IETF protocol standards, and widely recognized industry best practices (e.g., Mozilla, OWASP). + - For Key Exchange: ECDH-P384 > ECDH-P256 > DH-4096 > DH-2048 > RSA-4096 > RSA-2048 > None + - For Symmetric Encryption: AES-256-GCM > ChaCha20-Poly1305 > AES-128-GCM - Asymmetric key exchange (e.g., Diffie-Hellman, RSA) is used to securely negotiate session keys. These protocols allow both parties to agree on a symmetric key for fast, secure communication (similar to how TLS works). - Asymmetric cryptography is used for the key exchange due to the nature of public/private keys where symmetric would need to manually pre-share a key if not for the key exchange protocols. - Symmetric cryptography is used for the general communication due to their superiority in terms of speed. Keys will be generated through the key exchange protocol and will last until closure of the socket. -- GitLab From b55e9cf9cb1c13f35908feacf817cb055fb91365 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:10:10 +0200 Subject: [PATCH 028/139] (#49) Specified that socket can be closed at anytime if need be. --- docs/report/protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index e6843e2..649fcbc 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -57,7 +57,7 @@ ### 2.2 Communication Flow - Data packets contain only the agreed-upon metrics/features in JSON format -- The socket remains open for periodic updates +- The socket remains open for periodic updates, unless closure is called by any of the parties. - Each metric follows a predefined JSON schema specified in the protocol - All string data in JSON is UTF-8 encoded -- GitLab From 81b7cfd90e24aa5f63e3fe27feea72fea2eea48b Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:10:54 +0200 Subject: [PATCH 029/139] (#49) Renamed section to further emphasize on data format encapsulating the data content itself. --- docs/report/protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index 649fcbc..fd475b9 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -54,7 +54,7 @@ - The length field specifies the size of the following JSON payload in bytes - JSON structure is used for flexible data representation while maintaining schema validation -### 2.2 Communication Flow +### 2.2 Data content - Data packets contain only the agreed-upon metrics/features in JSON format - The socket remains open for periodic updates, unless closure is called by any of the parties. -- GitLab From 7171736eb4215cf955cb15d3b149b922beb4567b Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:11:30 +0200 Subject: [PATCH 030/139] (#49) Clarified reaction to a closure request. --- docs/report/protocol.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index fd475b9..2ed1f59 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -68,4 +68,5 @@ ## 4. Session Termination - Either side can request to close the socket. + - Upon request, both parties will close the socket no matter the circonstences. Closing should then be thoughtful to avoid constant closure and re-opening. - Session keys and state are discarded upon closure. -- GitLab From b2fcc2fad504fbe8272f60d746b3d8c4025945d6 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:16:31 +0200 Subject: [PATCH 031/139] (#49) Removed repeating lines forgotten upon re-wording. --- docs/report/protocol.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index 2ed1f59..7fb9ec2 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -36,8 +36,6 @@ - Symmetric cryptography is used for the general communication due to their superiority in terms of speed. Keys will be generated through the key exchange protocol and will last until closure of the socket. - Multiple algorithms may be supported for key exchange, but only one is chosen per session. - Upon determining the used algorithm, all further communication will be encrypted to prevent attackers from fingerprinting mod versions based on supported features. - - Public key length (e.g., 2048-bit, 4096-bit) should also be included as a capability in the handshake, ensuring both sides agree on compatible key sizes for secure exchange. - - Upon determining the used algorithm and key size, all further communication will be encrypted to prevent attackers from fingerprinting mod versions based on supported features. ### 1.2 Capability Negotiation (128 bits) -- GitLab From 865c130246ea0dd2eb969d4a6c493a5f95732120 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:17:05 +0200 Subject: [PATCH 032/139] (#49) Removed line forgotten in a commit upon moving it. --- docs/report/protocol.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index 7fb9ec2..a44951c 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -25,7 +25,6 @@ - Bit 36: ChaCha20-Poly1305 - Bits 37-65: Reserved for future symmetric algorithms - **Bits 66-127:** Reserved for future cryptographic features -- The server performs a bitwise AND to determine mutually supported algorithms. - **Algorithm Selection:** - The server performs a bitwise AND to determine mutually supported algorithms. - If multiple algorithms are supported, the server selects the strongest mutually supported algorithm according to NIST-approved minimums, IETF protocol standards, and widely recognized industry best practices (e.g., Mozilla, OWASP). -- GitLab From 49dda7eca763fafe998352fa7d1a16a2bd566fa9 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 12:31:14 +0200 Subject: [PATCH 033/139] (#49) Added features' list with their assigned bit. --- docs/report/protocol.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/report/protocol.md b/docs/report/protocol.md index a44951c..81d0497 100644 --- a/docs/report/protocol.md +++ b/docs/report/protocol.md @@ -39,6 +39,25 @@ ### 1.2 Capability Negotiation (128 bits) - The client sends a 128-bit field listing supported metrics/features (e.g., CPU usage, RAM usage). + - Some fields won't be in the list and will always be sent, such as: + - Mod Version + - This list will evolve with the added features upon development: + - Bit 0: OS + - Bit 1: CPU arch + - Bit 2: JRE version + - Bit 3: JVM Cores + - Bit 4: CPU Usage + - Bit 5: RAM Heap max + - Bit 6: RAM Heap usage + - Bit 7: RAM Non-Heap max + - Bit 8: RAM Non-Heap usage + - Bit 9: Launch arguments + - Bit 10: Uptime + - Bit 11: Players list + - Bit 12: Worlds list + - Bit 13: Logs + - Bit 14: IO write speed delay + - Bit 15: IO read speed delay - The server performs a bitwise AND to determine compatible features. - Only features supported by both sides are enabled for the session. -- GitLab From 6aa31e3d63e896a0fa74b2b82d5891fbc2cadd72 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 28 Aug 2025 14:56:52 +0200 Subject: [PATCH 034/139] (#42) Created Dockerfile for the web app. Used "Gunicorn" as the WSGI app as recommended by the Flask documentation when releasing for production. --- scripts/Dockerfile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 scripts/Dockerfile diff --git a/scripts/Dockerfile b/scripts/Dockerfile new file mode 100644 index 0000000..a557c79 --- /dev/null +++ b/scripts/Dockerfile @@ -0,0 +1,23 @@ +# Use official Python image as base +FROM python:3.11-slim + +# Set working directory +WORKDIR /app + +# Copy requirements first to leverage Docker cache +COPY ./web/requirements.txt . + +# Install dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy the rest of the application +COPY ./web . + +# Expose the port the app runs on +EXPOSE 5000 + +# Install gunicorn (recommended WSGI according to Flask documentation) +RUN pip install gunicorn + +# Command to run the application +CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"] \ No newline at end of file -- GitLab From cd05ec74d9753bffbe2e1ba955878a7844df517a Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Thu, 28 Aug 2025 18:07:32 +0200 Subject: [PATCH 035/139] better tabs for players/worlds/logs --- web/static/style.css | 5 +++++ web/templates/dashboard.html | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/web/static/style.css b/web/static/style.css index 026a8b6..63bd18b 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -207,6 +207,11 @@ p font-weight: lighter; } +#players +{ + display: block; +} + #server-type-icon { border-radius: 6px; diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 9936fa2..19ab12f 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -57,13 +57,15 @@ {% set max_key = "CPU_USED" %} {% set label = "CPU Used" %} {% include "components/horizontal_gauge.html" %} + {% include "components/graphic.html" %}

            I/O (W/R speeds)

            - + +

            Players

            {% set key = "PLAYERS" %} @@ -74,6 +76,11 @@ {% set key = "WORLDS" %} {% include "cards_list.html" %}
            +
            +

            Logs

            + {% set key = "LOGS" %} + {% include "cards_list.html" %} +
            {% set component = "CPU" %} {% set gauge_id = "cpuGauge" %} - {% set used_key = "CPU_USED" %} - {% set max_key = "CPU_USED" %} + {% set used_key = "CPU_USAGE" %} + {% set max_key = "CPU_USAGE" %} {% set label = "CPU Used" %} {% include "components/horizontal_gauge.html" %} - {% include "components/graphic.html" %} + + {% set used_key = "CPU_USAGE" %} + {% set label = "CPU Used" %} + {% include "components/graphic_1metric.html" %}

            I/O (W/R speeds)

            -- GitLab From a647d5467cac964df214f580e58f9d3706c6fff8 Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Thu, 28 Aug 2025 20:53:26 +0200 Subject: [PATCH 037/139] all graphics --- web/static/style.css | 5 ++ ...{graphic_1metric.html => graphic_cpu.html} | 0 web/templates/components/graphic_io.html | 60 +++++++++++++++++++ ...graphic_2metrics.html => graphic_ram.html} | 4 +- web/templates/dashboard.html | 16 ++++- 5 files changed, 80 insertions(+), 5 deletions(-) rename web/templates/components/{graphic_1metric.html => graphic_cpu.html} (100%) create mode 100644 web/templates/components/graphic_io.html rename web/templates/components/{graphic_2metrics.html => graphic_ram.html} (93%) diff --git a/web/static/style.css b/web/static/style.css index 63bd18b..20253b6 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -22,6 +22,11 @@ h1 margin: 0px; } +h3 +{ + color: #aaa; +} + h5 { font-weight: regular; diff --git a/web/templates/components/graphic_1metric.html b/web/templates/components/graphic_cpu.html similarity index 100% rename from web/templates/components/graphic_1metric.html rename to web/templates/components/graphic_cpu.html diff --git a/web/templates/components/graphic_io.html b/web/templates/components/graphic_io.html new file mode 100644 index 0000000..5c1e199 --- /dev/null +++ b/web/templates/components/graphic_io.html @@ -0,0 +1,60 @@ + +
            + +
            + + + + + \ No newline at end of file diff --git a/web/templates/components/graphic_2metrics.html b/web/templates/components/graphic_ram.html similarity index 93% rename from web/templates/components/graphic_2metrics.html rename to web/templates/components/graphic_ram.html index 455a3a5..c3d2b5e 100644 --- a/web/templates/components/graphic_2metrics.html +++ b/web/templates/components/graphic_ram.html @@ -1,6 +1,6 @@
            - +
            @@ -23,7 +23,7 @@ areaChart.update(); } - const ctx = document.getElementById("areaChart").getContext("2d"); + const ctx = document.getElementById("areaChart_ram").getContext("2d"); const areaChart = new Chart(ctx, { type: "line", data: { diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 7689b2f..183614a 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -17,6 +17,8 @@ "NON_HEAP_USED": 2.8, "NON_HEAP_MAX": 4, "CPU_USAGE": 37, + "READ_SPEED": 66, + "WRITE_SPEED": 33, "PLAYERS": [ {"attr1": "Niiro", "attr2": 1}, {"attr1": "Ziroel", "attr2": 2}, @@ -48,7 +50,7 @@ {% set max_non_heap = "NON_HEAP_MAX" %} {% set label1 = "Heap Used" %} {% set label2 = "Non Heap Used" %} - {% include "components/graphic_2metrics.html" %} + {% include "components/graphic_ram.html" %}
            @@ -62,10 +64,18 @@ {% set used_key = "CPU_USAGE" %} {% set label = "CPU Used" %} - {% include "components/graphic_1metric.html" %} + {% include "components/graphic_cpu.html" %}
            -

            I/O (W/R speeds)

            +

            Disk R/W speeds

            + + {% set component = "IO" %} + + {% set read_speed = "READ_SPEED" %} + {% set write_speed = "WRITE_SPEED" %} + {% set label1 = "Read Speed" %} + {% set label2 = "Write Speed" %} + {% include "components/graphic_io.html" %}
            -- GitLab From b36350f5dcfb468f26301ad38efec867cac5a4ec Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Fri, 29 Aug 2025 09:36:18 +0200 Subject: [PATCH 038/139] CPU gauge patched --- web/templates/components/horizontal_gauge.html | 3 +-- web/templates/dashboard.html | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web/templates/components/horizontal_gauge.html b/web/templates/components/horizontal_gauge.html index 5c3ea9a..9c27e8d 100644 --- a/web/templates/components/horizontal_gauge.html +++ b/web/templates/components/horizontal_gauge.html @@ -18,10 +18,9 @@ gauge.value = ratio; gauge.max = 100; - label.textContent = "{{ label }}: " + used + "GB / " + max + "GB (" + ratio.toFixed(1) + "%)"; + label.textContent = "{{ label }}: " + used + "{{ unit }} / " + max + "{{ unit }} (" + ratio.toFixed(1) + "%)"; } - // Call update immediately with "data" defined in dashboard.html if (typeof data !== "undefined") { update{{ gauge_id | capitalize }}Gauge(data); diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 183614a..902505b 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -17,6 +17,7 @@ "NON_HEAP_USED": 2.8, "NON_HEAP_MAX": 4, "CPU_USAGE": 37, + "CPU_MAX": 100, "READ_SPEED": 66, "WRITE_SPEED": 33, "PLAYERS": [ @@ -36,12 +37,14 @@ {% set used_key = "HEAP_USED" %} {% set max_key = "HEAP_MAX" %} {% set label = "Heap Used" %} + {% set unit = "GB" %} {% include "components/horizontal_gauge.html" %} {% set gauge_id = "nonHeapGauge" %} {% set used_key = "NON_HEAP_USED" %} {% set max_key = "NON_HEAP_MAX" %} {% set label = "Non Heap Used" %} + {% set unit = "GB" %} {% include "components/horizontal_gauge.html" %} {% set used_heap = "HEAP_USED" %} @@ -58,8 +61,9 @@ {% set gauge_id = "cpuGauge" %} {% set used_key = "CPU_USAGE" %} - {% set max_key = "CPU_USAGE" %} + {% set max_key = "CPU_MAX" %} {% set label = "CPU Used" %} + {% set unit = "%" %} {% include "components/horizontal_gauge.html" %} {% set used_key = "CPU_USAGE" %} -- GitLab From f15b2abc23956f1cf1343c25c22973f973de351d Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Fri, 29 Aug 2025 11:05:36 +0200 Subject: [PATCH 039/139] (#31) Adding metric provider interface --- .../me/peteras17/beacon/BeaconCommon.java | 51 ++++++---------- .../me/peteras17/beacon/MetricManager.java | 60 +++++++++++++++++-- .../beacon/metrics/IMetricProvider.java | 16 +++++ .../peteras17/beacon/metrics/MetricGroup.java | 47 +++++++++------ .../Memory.java} | 26 ++++++-- 5 files changed, 140 insertions(+), 60 deletions(-) create mode 100644 mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java rename mods/common/src/main/java/me/peteras17/beacon/metrics/{MemoryMetrics.java => providers/Memory.java} (72%) diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index fb473a1..e7b2a93 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -29,15 +29,15 @@ package me.peteras17.beacon; import io.javalin.http.HttpStatus; import me.peteras17.beacon.cmd.ExecResult; -import me.peteras17.beacon.metrics.MemoryMetrics; +import me.peteras17.beacon.metrics.providers.Memory; import me.peteras17.beacon.logs.Interceptor; import me.peteras17.beacon.ModVersion; import java.util.function.Consumer; import io.javalin.Javalin; import me.peteras17.beacon.metrics.MetricGroup; -import me.peteras17.beacon.metrics.MetricNode; import me.peteras17.beacon.metrics.MetricType; +import me.peteras17.beacon.metrics.providers.Mod; import org.apache.logging.log4j.Level; /** @@ -59,7 +59,7 @@ public final class BeaconCommon { /** * Hardware metrics collection manager (manages the thread) */ - private MetricManager _collectionMgr; + private MetricManager _metricMgr; /** * Instance of the capability manager @@ -99,9 +99,13 @@ public final class BeaconCommon { _cmdMgr = new CommandManager(this); _metricsRoot = new MetricGroup(MetricType.ROOT, Capability.BASE_METRICS); _capMgr = new CapabilityManager(); - + _metricMgr = new MetricManager(_metricsRoot); + // Enable base metrics _capMgr.enable(Capability.BASE_METRICS); + + // Create metric providers + _metricMgr.register(new Memory()); } /** @@ -135,28 +139,6 @@ public final class BeaconCommon { return _metricsRoot; } - /** - * Creates the common library metrics and adds them to the root node - */ - private void createCommonMetrics() - { - // Scrape timestamp - _metricsRoot.addMetric(new MetricNode(MetricType.TIMESTAMP, Capability.BASE_METRICS, () -> System.currentTimeMillis() / 1000)); - - // Mod metrics category - MetricGroup modMetrics = new MetricGroup(MetricType.MOD, Capability.BASE_METRICS); - modMetrics.addMetric(new MetricNode(MetricType.MOD_VERSION, Capability.BASE_METRICS, () -> VERSION)); - - // Memory-related information - MemoryMetrics memoryMetrics = new MemoryMetrics(); - _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_FREE, Capability.BASE_METRICS, memoryMetrics::getHeapFree)); - _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_USED, Capability.BASE_METRICS, memoryMetrics::getHeapUsed)); - _metricsRoot.addMetric(new MetricNode(MetricType.HEAP_MAX, Capability.BASE_METRICS, memoryMetrics::getHeapMax)); - _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_FREE, Capability.BASE_METRICS, memoryMetrics::getNonHeapFree)); - _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_USED, Capability.BASE_METRICS, memoryMetrics::getNonHeapUsed)); - _metricsRoot.addMetric(new MetricNode(MetricType.NON_HEAP_MAX, Capability.BASE_METRICS, memoryMetrics::getNonHeapMax)); - } - /** * Informs the common lib. that the server is up, and the mod has been loaded * @param cfgPath Full path to the mod's configuration path @@ -172,12 +154,8 @@ public final class BeaconCommon { // Create instances _started = true; - _collectionMgr = new MetricManager(_metricsRoot); _logInterceptor = new Interceptor(50, Level.INFO); - - // Start collection manager - createCommonMetrics(); - + // Create HTTP endpoints _javalin = Javalin.create() .get("/heartbeat", ctx -> ctx.status(HttpStatus.OK)) @@ -186,7 +164,7 @@ public final class BeaconCommon { ctx.status(HttpStatus.OK); }) .get("/metrics", ctx -> { - String jsonStr = _collectionMgr.getLastValues(_capMgr); + String jsonStr = _metricMgr.getLastValues(_capMgr); if(jsonStr == null) { ctx.status(HttpStatus.INTERNAL_SERVER_ERROR); } @@ -199,10 +177,15 @@ public final class BeaconCommon { beaconCmdCb.run(); }) .start(25566); - - // Call command register function, but only the first time the mod is loaded + + // Tasks done only when it's the first time the mod is started if(_firstStart) { + + // Call command register function cmdRegisterCb.accept(_cmdMgr); + + // Register all metrics + _metricMgr.registerMetrics(); } _firstStart = false; diff --git a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java index 2e5dbbb..bc0d0b9 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java @@ -30,18 +30,28 @@ package me.peteras17.beacon; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import me.peteras17.beacon.metrics.IMetricProvider; import me.peteras17.beacon.metrics.MetricGroup; -import me.peteras17.beacon.metrics.MetricType; import java.util.*; -import java.util.logging.Logger; class MetricManager { - - + /** + * Root metric group + */ private final MetricGroup _root; + /** + * List of all metric providers + */ + private final List _providers; + + /** + * Used to know whether a call to .register() has already been done + */ + private boolean _registered; + /** * Instantiates a new hardware metrics collection thread * Does not automatically start the thread @@ -49,6 +59,48 @@ class MetricManager { MetricManager(MetricGroup root) { _root = root; + _providers = new LinkedList<>(); + _registered = false; + } + + + /** + * Register all metrics provided by the metric providers that have been + * registered before the call to this function + * + * @apiNote Thread-safe code + */ + void registerMetrics() + { + synchronized (_providers) { + + // Only allow call once + if(_registered) + { + throw new IllegalStateException("Providers have already been registered!"); + } + + for(IMetricProvider provider : _providers) + { + provider.register(_root); + } + + _registered = true; + } + } + + + /** + * Registers a new metric provider + * @param provider Provider instance + * + * @apiNote Thread-safe code + */ + public void register(IMetricProvider provider) + { + synchronized (_providers) { + _providers.add(provider); + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java new file mode 100644 index 0000000..bf89a58 --- /dev/null +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java @@ -0,0 +1,16 @@ +package me.peteras17.beacon.metrics; + +/** + * Common interface for all metric providers + */ +public interface IMetricProvider { + + /** + * Registers this provider to the provided root group + * @param rootGroup Group to register provider to + * @throws IllegalArgumentException Raised in case the metric type of any + * of the metrics that the provider tried + * to register already exists in the group + */ + public void register(MetricGroup rootGroup) throws IllegalArgumentException; +} diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java index aa22927..47a4c48 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java @@ -64,17 +64,26 @@ public class MetricGroup implements IMetric { this.capability = capability; this.metricType = metricType; } - - public void addMetric(IMetric metric) { - - // Check for duplicated metric types between what we have and what the other metric has - for(MetricType metricType : MetricType.values()) { - if(null != findMetric(metricType) && null != metric.findMetric(metricType)) { - throw new IllegalArgumentException(String.format("Metric type %s is duplicate", metricType.name())); + + /** + * Adds a new metric to this metric group + * @param metric Metric to add to the group + * @throws IllegalArgumentException Raised in case type of provided metric already exists + * + * @apiNote Thread-safe code + */ + public void addMetric(IMetric metric) throws IllegalArgumentException { + synchronized (metrics) + { + // Check for duplicated metric types between what we have and what the other metric has + for(MetricType metricType : MetricType.values()) { + if(null != findMetric(metricType) && null != metric.findMetric(metricType)) { + throw new IllegalArgumentException(String.format("Metric type %s is duplicate", metricType.name())); + } } - } - metrics.add(metric); + metrics.add(metric); + } } @Override @@ -98,11 +107,13 @@ public class MetricGroup implements IMetric { // Ignore call if unsupported if(!capMgr.supports(capability)) return; - + // Serialize every metric inside - ObjectNode innerNode = on.withObject(getName()); - for(IMetric metric : metrics) { - metric.serialize(innerNode, capMgr); + synchronized (metrics) { + ObjectNode innerNode = on.withObject(getName()); + for (IMetric metric : metrics) { + metric.serialize(innerNode, capMgr); + } } } @@ -114,10 +125,12 @@ public class MetricGroup implements IMetric { // Check every inner metric for the type IMetric foundMetric = null; - for(IMetric metric : metrics) { - foundMetric = metric.findMetric(metricType); - if(foundMetric != null) { - break; + synchronized (metrics) { + for (IMetric metric : metrics) { + foundMetric = metric.findMetric(metricType); + if (foundMetric != null) { + break; + } } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java similarity index 72% rename from mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java rename to mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java index eb7d06a..5fc29da 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MemoryMetrics.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java @@ -25,7 +25,13 @@ * SOFTWARE. */ -package me.peteras17.beacon.metrics; +package me.peteras17.beacon.metrics.providers; + +import me.peteras17.beacon.Capability; +import me.peteras17.beacon.metrics.IMetricProvider; +import me.peteras17.beacon.metrics.MetricGroup; +import me.peteras17.beacon.metrics.MetricNode; +import me.peteras17.beacon.metrics.MetricType; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; @@ -33,7 +39,7 @@ import java.lang.management.MemoryMXBean; /** * Class to retrieve memory-related metrics */ -public class MemoryMetrics { +public class Memory implements IMetricProvider { /** * Memory bean, used to retrieve memory-related information @@ -43,7 +49,7 @@ public class MemoryMetrics { /** * Default constructor */ - public MemoryMetrics() + public Memory() { _memoryBean = ManagementFactory.getMemoryMXBean(); } @@ -83,7 +89,7 @@ public class MemoryMetrics { { return _memoryBean.getNonHeapMemoryUsage().getMax() - _memoryBean.getNonHeapMemoryUsage().getUsed(); } - + /** * Returns the number of used bytes of non-heap memory * @return Used bytes @@ -92,7 +98,7 @@ public class MemoryMetrics { { return _memoryBean.getNonHeapMemoryUsage().getUsed(); } - + /** * Returns the maximum number of bytes of heap memory * @return Maximum bytes @@ -101,4 +107,14 @@ public class MemoryMetrics { { return _memoryBean.getNonHeapMemoryUsage().getMax(); } + + @Override + public void register(MetricGroup rootGroup) throws IllegalArgumentException { + rootGroup.addMetric(new MetricNode(MetricType.HEAP_FREE, Capability.BASE_METRICS, this::getHeapFree)); + rootGroup.addMetric(new MetricNode(MetricType.HEAP_USED, Capability.BASE_METRICS, this::getHeapUsed)); + rootGroup.addMetric(new MetricNode(MetricType.HEAP_MAX, Capability.BASE_METRICS, this::getHeapMax)); + rootGroup.addMetric(new MetricNode(MetricType.NON_HEAP_FREE, Capability.BASE_METRICS, this::getNonHeapFree)); + rootGroup.addMetric(new MetricNode(MetricType.NON_HEAP_USED, Capability.BASE_METRICS, this::getNonHeapUsed)); + rootGroup.addMetric(new MetricNode(MetricType.NON_HEAP_MAX, Capability.BASE_METRICS, this::getNonHeapMax)); + } } -- GitLab From a8b7e56cae0bb5fb30462129e88760fb37fb1a86 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Fri, 29 Aug 2025 11:05:58 +0200 Subject: [PATCH 040/139] (#31) Adding mod and timestamp metric providers --- .../me/peteras17/beacon/BeaconCommon.java | 3 ++ .../beacon/metrics/providers/Mod.java | 38 +++++++++++++++++++ .../beacon/metrics/providers/Timestamp.java | 17 +++++++++ 3 files changed, 58 insertions(+) create mode 100644 mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java create mode 100644 mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index e7b2a93..cc9df90 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -38,6 +38,7 @@ import io.javalin.Javalin; import me.peteras17.beacon.metrics.MetricGroup; import me.peteras17.beacon.metrics.MetricType; import me.peteras17.beacon.metrics.providers.Mod; +import me.peteras17.beacon.metrics.providers.Timestamp; import org.apache.logging.log4j.Level; /** @@ -106,6 +107,8 @@ public final class BeaconCommon { // Create metric providers _metricMgr.register(new Memory()); + _metricMgr.register(new Mod()); + _metricMgr.register(new Timestamp()); } /** diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java new file mode 100644 index 0000000..40cd8ac --- /dev/null +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java @@ -0,0 +1,38 @@ +package me.peteras17.beacon.metrics.providers; + +import me.peteras17.beacon.Capability; +import me.peteras17.beacon.metrics.IMetricProvider; +import me.peteras17.beacon.metrics.MetricGroup; +import me.peteras17.beacon.metrics.MetricNode; +import me.peteras17.beacon.metrics.MetricType; +import me.peteras17.beacon.ModVersion; + +public class Mod implements IMetricProvider { + + /** + * Compiled mod's version + */ + private static String VERSION = ModVersion.VERSION; + + /** + * Metrics group + */ + private MetricGroup _modMetrics; + + /** + * Create a mod metrics provider + */ + public Mod() { + _modMetrics = new MetricGroup(MetricType.MOD, Capability.BASE_METRICS); + } + + @Override + public void register(MetricGroup rootGroup) throws IllegalArgumentException { + + // Instantiate and add all mod metrics + _modMetrics.addMetric(new MetricNode(MetricType.MOD_VERSION, Capability.BASE_METRICS, () -> VERSION)); + + // Add this metric group + rootGroup.addMetric(_modMetrics); + } +} diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java new file mode 100644 index 0000000..1fd4b37 --- /dev/null +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java @@ -0,0 +1,17 @@ +package me.peteras17.beacon.metrics.providers; + +import me.peteras17.beacon.Capability; +import me.peteras17.beacon.metrics.IMetricProvider; +import me.peteras17.beacon.metrics.MetricGroup; +import me.peteras17.beacon.metrics.MetricNode; +import me.peteras17.beacon.metrics.MetricType; + +/** + * Timestamp metric provider + */ +public class Timestamp implements IMetricProvider { + @Override + public void register(MetricGroup rootGroup) throws IllegalArgumentException { + rootGroup.addMetric(new MetricNode(MetricType.TIMESTAMP, Capability.BASE_METRICS, () -> System.currentTimeMillis() / 1000)); + } +} -- GitLab From 6f4e34d15298a135bc626e4407c0c7093962686e Mon Sep 17 00:00:00 2001 From: LeoR-HEIG Date: Fri, 29 Aug 2025 11:09:26 +0200 Subject: [PATCH 041/139] font successfully overrided --- web/static/style.css | 8 +++++++- web/templates/base.html | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/web/static/style.css b/web/static/style.css index 20253b6..096f044 100644 --- a/web/static/style.css +++ b/web/static/style.css @@ -3,16 +3,22 @@ --icon_size: 42px; --one_third: calc(100%/3); --rounded_corners_graphs: 24px; + --app-font: "Montserrat", sans-serif; } body { background-color: #111; color: white; - font-family: "Montserrat", sans-serif !important; + font-family: var(--app-font) !important; overflow: hidden; } +body * +{ + font-family: var(--app-font) !important; +} + h1 { font-size: 50px; diff --git a/web/templates/base.html b/web/templates/base.html index 5e8f687..e6d6094 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -17,11 +17,12 @@ --> - + +
            @@ -104,7 +105,7 @@

            Terminal

            {% set key = "TERMINAL" %} -
            +
            @@ -179,6 +180,13 @@ if (typeof updateCpuGauge === "function") updateCpuGauge(json); } + // Function to update all graphs + function updateAllGraphs(json) { + if (typeof updateAreaChart_io === "function") updateAreaChart_io(json); + if (typeof updateAreaChart_cpu === "function") updateAreaChart_cpu(json); + if (typeof updateAreaChart === "function") updateAreaChart(json); + } + // Initial update document.addEventListener("DOMContentLoaded", function() { updateAllGauges(data); @@ -192,9 +200,11 @@ return response.json(); }) .then(json => { - if (json && json.ROOT) { - let data = json; + if (json && json.data.ROOT) { + let data = json.data; + data.timestamp = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }); updateAllGauges(data); + updateAllGraphs(data); } }) .catch(() => { -- GitLab From 68ba2ab3e2e772c89e0ba4af8b98e0112a07c986 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 18:34:34 +0200 Subject: [PATCH 100/139] fix: (#47) Small fixes in code --- .../main/java/me/peteras17/beacon/BeaconCommon.java | 11 ++++++++--- .../java/me/peteras17/beacon/socket/ops/JsonOp.java | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index d68c61a..81ef017 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -62,7 +62,7 @@ public final class BeaconCommon { /** * Has a call to .beaconPreHeat() been done? */ - private static boolean _heatedUp = false; + private boolean _heatedUp = false; /** * Hardware metrics collection manager (manages the thread) @@ -117,6 +117,11 @@ public final class BeaconCommon { */ ExecResult runStatusCommand(Object context) { + if(!_started) + { + return new ExecResult(BeaconStatus.NOT_STARTED, "Common library not started yet!"); + } + return new ExecResult(BeaconStatus.OK, "It's working"); } @@ -187,8 +192,8 @@ public final class BeaconCommon { .get("/heartbeat", ctx -> ctx.status(HttpStatus.OK)) .get("/public", ctx -> { byte[] publicMetrics = getPublicInfo(); - byte[] payload = new byte[(Integer.SIZE / 8) + publicMetrics.length]; - byte[] lengthBytes = ByteBuffer.allocate(Integer.SIZE / 8) + byte[] payload = new byte[Integer.BYTES + publicMetrics.length]; + byte[] lengthBytes = ByteBuffer.allocate(Integer.BYTES) .order(ByteOrder.BIG_ENDIAN) .putInt(publicMetrics.length) .array(); diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/JsonOp.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/JsonOp.java index 7b73e7f..e6de1ff 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/JsonOp.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/JsonOp.java @@ -49,8 +49,8 @@ public abstract class JsonOp implements IOperation { @Override public byte[] serialize() { - byte[] payload = new byte[1 + (Integer.SIZE / 8) + _payload.length]; - byte[] lengthPayload = ByteBuffer.allocate(Integer.SIZE / 8) + byte[] payload = new byte[1 + Integer.BYTES + _payload.length]; + byte[] lengthPayload = ByteBuffer.allocate(Integer.BYTES) .order(ByteOrder.BIG_ENDIAN) .putInt(_payload.length) .array(); -- GitLab From 88976d0cb4b2031c3d1fb9d72bc4ceae80306ea1 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 18:34:49 +0200 Subject: [PATCH 101/139] test: (#47) Adding lifecycle tests --- mods/common/src/test/java/Constants.java | 34 ++++ mods/common/src/test/java/DummyTest.java | 11 -- mods/common/src/test/java/LifecycleTest.java | 164 +++++++++++++++++++ 3 files changed, 198 insertions(+), 11 deletions(-) create mode 100644 mods/common/src/test/java/Constants.java delete mode 100644 mods/common/src/test/java/DummyTest.java create mode 100644 mods/common/src/test/java/LifecycleTest.java diff --git a/mods/common/src/test/java/Constants.java b/mods/common/src/test/java/Constants.java new file mode 100644 index 0000000..2709f01 --- /dev/null +++ b/mods/common/src/test/java/Constants.java @@ -0,0 +1,34 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 03/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +public class Constants { + static final int JAVALIN_PORT = 25566; + static final String JAVALIN_URL = "http://127.0.0.1:" + JAVALIN_PORT; + static final String HEARTBEAT_URL = JAVALIN_URL + "/heartbeat"; + static final String PUBLIC_URL = JAVALIN_URL + "/public"; + static final String SOCKET_URL = JAVALIN_URL + "/socket"; +} diff --git a/mods/common/src/test/java/DummyTest.java b/mods/common/src/test/java/DummyTest.java deleted file mode 100644 index 770c4cb..0000000 --- a/mods/common/src/test/java/DummyTest.java +++ /dev/null @@ -1,11 +0,0 @@ -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class DummyTest -{ - @Test - public void testDummy() - { - Assertions.assertTrue(true); - } -} diff --git a/mods/common/src/test/java/LifecycleTest.java b/mods/common/src/test/java/LifecycleTest.java new file mode 100644 index 0000000..ec56e25 --- /dev/null +++ b/mods/common/src/test/java/LifecycleTest.java @@ -0,0 +1,164 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 03/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +import io.javalin.http.HttpStatus; +import me.peteras17.beacon.BeaconCommon; +import me.peteras17.beacon.BeaconStatus; +import me.peteras17.beacon.CommandManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.util.concurrent.atomic.AtomicReference; + +public class LifecycleTest { + private BeaconCommon commonLib; + + @BeforeEach + public void setup() + { + commonLib = new BeaconCommon(); + } + + @AfterEach + public void teardown() + { + // Try to stop the library so it frees ports + commonLib.beaconStop(); + } + + /** + * Tests nominal lifecycle: .beaconPreHeat(), .beaconStart(), .beaconStop() + * Tests /heartbeat endpoint + * Tests /beacon command execution + */ + @Test + public void testNominalLifecycle() { + + AtomicReference cmdMgr = new AtomicReference<>(); + + // Instantiate library, and start it + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(cmdMgr::set)); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Test Beacon command execution + Assertions.assertEquals(BeaconStatus.OK, cmdMgr.get().getRootCommand().execute(null).status()); + + // Check Beacon is responding to heartbeats + URLConnection conn = Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + return heartbeatUrl.openConnection(); + }); + Assertions.assertDoesNotThrow(() -> (((HttpURLConnection)conn).getResponseCode())); + + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } + + /** + * Tests cases where calls to .beaconPreHeat() shouldn't work + */ + @Test + public void testNoPreHeat() + { + // Pre-heat, and try to call it again + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(commandManager -> {})); + Assertions.assertEquals(BeaconStatus.TOO_HOT, commonLib.beaconPreHeat(commandManager -> {})); + + // Start lib, and try to call .beaconPreHeat() again + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + Assertions.assertEquals(BeaconStatus.TOO_HOT, commonLib.beaconPreHeat(commandManager -> {})); + + // Stop lib, and try to call .beaconPreHeat() again (it only works once after instantiating the library) + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + Assertions.assertEquals(BeaconStatus.TOO_HOT, commonLib.beaconPreHeat(commandManager -> {})); + } + + /** + * Tests cases where calls to .beaconStart() shouldn't work + */ + @Test + public void testNoStart() + { + // Can't call .beaconStart() before call to .beaconPreHeat() + Assertions.assertEquals(BeaconStatus.TOO_COLD, commonLib.beaconStart("")); + + // Pre-heat, start lib + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(commandManager -> {})); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Can't call .beaconStart() because it's already running + Assertions.assertEquals(BeaconStatus.ALREADY_STARTED, commonLib.beaconStart("")); + } + + /** + * Tests cases where calls to .beaconStop() shouldn't work + */ + @Test + public void testNoStop() + { + // Can't call .beaconStop() if it's not running + Assertions.assertEquals(BeaconStatus.NOT_STARTED, commonLib.beaconStop()); + + // Pre-heat, try to stop + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(commandManager -> {})); + Assertions.assertEquals(BeaconStatus.NOT_STARTED, commonLib.beaconStop()); + + // Start library, and stop + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + + // Can't call .beaconStop() because it's stopped + Assertions.assertEquals(BeaconStatus.NOT_STARTED, commonLib.beaconStop()); + } + + /** + * Tests that Beacon's common library does not execute commands before a call to .beaconStart() + */ + @Test + public void testCommandBeforeStart() + { + AtomicReference cmdMgr = new AtomicReference<>(); + + // Instantiate library, and pre-heat it. Try to execute command + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(cmdMgr::set)); + Assertions.assertEquals(BeaconStatus.NOT_STARTED, cmdMgr.get().getRootCommand().execute(null).status()); + + // Start library, and retry + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + Assertions.assertEquals(BeaconStatus.OK, cmdMgr.get().getRootCommand().execute(null).status()); + + // Stop Beacon, and retry + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + Assertions.assertEquals(BeaconStatus.NOT_STARTED, cmdMgr.get().getRootCommand().execute(null).status()); + } +} -- GitLab From f0ce6f1a9c05971c9b3bcb3e4a945061f80173e3 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 18:34:56 +0200 Subject: [PATCH 102/139] test: (#47) Adding URL tests --- mods/common/src/test/java/UrlTest.java | 278 +++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 mods/common/src/test/java/UrlTest.java diff --git a/mods/common/src/test/java/UrlTest.java b/mods/common/src/test/java/UrlTest.java new file mode 100644 index 0000000..006e09c --- /dev/null +++ b/mods/common/src/test/java/UrlTest.java @@ -0,0 +1,278 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 03/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.javalin.http.HttpStatus; +import me.peteras17.beacon.BeaconCommon; +import me.peteras17.beacon.BeaconStatus; +import me.peteras17.beacon.CommandManager; +import me.peteras17.beacon.cap.Capability; +import me.peteras17.beacon.cap.FeatCapability; +import me.peteras17.beacon.cap.ICapability; +import me.peteras17.beacon.data.ServerType; +import me.peteras17.beacon.metrics.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.*; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.Random; +import java.util.concurrent.atomic.AtomicReference; + +public class UrlTest { + private BeaconCommon commonLib; + + @BeforeEach + public void setup() + { + commonLib = new BeaconCommon(); + } + + @AfterEach + public void teardown() + { + // Try to stop the library so it frees ports + commonLib.beaconStop(); + } + + /** + * Tests /heartbeat URL while Beacon common library is not running + */ + @Test + public void testJavalinWhileNotRunning() + { + AtomicReference cmdMgr = new AtomicReference<>(); + + // Check Beacon does not respond to heartbeats before call to .beaconPreHeat() + Assertions.assertThrows(ConnectException.class, () -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + int ignored = ((HttpURLConnection) heartbeatUrl.openConnection()).getResponseCode(); + }); + + // Pre-heat library, and test again + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(cmdMgr::set)); + Assertions.assertThrows(ConnectException.class, () -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + int ignored = ((HttpURLConnection) heartbeatUrl.openConnection()).getResponseCode(); + }); + + // Start common lib. Request should work now + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + int ignored = ((HttpURLConnection) heartbeatUrl.openConnection()).getResponseCode(); + }); + + // Stop Beacon and test again + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + Assertions.assertThrows(ConnectException.class, () -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + int ignored = ((HttpURLConnection) heartbeatUrl.openConnection()).getResponseCode(); + }); + } + + /** + * Test nominal case where /heartbeat works + */ + @Test + public void testNominalHeartbeat() + { + AtomicReference cmdMgr = new AtomicReference<>(); + + // Instantiate library, and start it + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(cmdMgr::set)); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Check Beacon is responding to heartbeats + URLConnection conn = Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.HEARTBEAT_URL).toURL(); + return heartbeatUrl.openConnection(); + }); + int httpStatus = Assertions.assertDoesNotThrow(() -> (((HttpURLConnection)conn).getResponseCode())); + Assertions.assertEquals(0, conn.getContentLength()); // No data returned in request + Assertions.assertEquals(HttpStatus.OK.getCode(), httpStatus); // No data returned in request + + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } + + /** + * Tests usage of /public when no public information metrics have been created + */ + @Test + public void testPublicWithoutMetric() + { + AtomicReference cmdMgr = new AtomicReference<>(); + + // Instantiate library, and start it + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat(cmdMgr::set)); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Check /public response + URLConnection conn = Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.PUBLIC_URL).toURL(); + return heartbeatUrl.openConnection(); + }); + int httpStatus = Assertions.assertDoesNotThrow(() -> (((HttpURLConnection)conn).getResponseCode())); + Assertions.assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.getCode(), httpStatus); + + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } + + /** + * Tests usage of /public when the public information metric's result cannot be serialized + */ + @Test + public void testPublicUnserializableMetric() + { + class UnserializableMetric implements IMetric { + + @Override + public MetricType getType() { + return MetricType.PROPERTIES; + } + + @Override + public String getName() { + return "Unserializable"; + } + + @Override + public Capability getNeededCapability() { + return Capability.ALWAYS_ACTIVE; + } + + @Override + public void serialize(ObjectNode on, ICapability capMgr) { + on.putPOJO("property", commonLib); // The library is too complex to serialize + } + + @Override + public IMetric findMetric(MetricType metricType) { + return metricType == getType() ? this : null; + } + } + + class MetricProvider implements IMetricProvider + { + + @Override + public void register(MetricGroup rootGroup) throws IllegalArgumentException { + rootGroup.addMetric(new UnserializableMetric()); + } + + @Override + public void stop() { + + } + } + + // Instantiate library, add metric and start it + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat((ignored) -> {})); + commonLib.getMetricManager() + .register(new MetricProvider()); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Check /public response + URLConnection conn = Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.PUBLIC_URL).toURL(); + return heartbeatUrl.openConnection(); + }); + int httpStatus = Assertions.assertDoesNotThrow(() -> (((HttpURLConnection)conn).getResponseCode())); + Assertions.assertEquals(Integer.BYTES + 2, conn.getContentLength()); // Should return "{}" + String resp = Assertions.assertDoesNotThrow(() -> new BufferedReader(new InputStreamReader((InputStream) conn.getContent())).readLine()); + Assertions.assertEquals("\0\0\0\2{}", resp); + Assertions.assertEquals(HttpStatus.OK.getCode(), httpStatus); + + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } + + /** + * Test nominal usage of /public + */ + @Test + public void testNominalPublic() + { + int randomNumber = new Random().nextInt(); + + class MetricProvider implements IMetricProvider + { + public final MetricGroup publicGroup = new MetricGroup(MetricType.PROPERTIES, Capability.ALWAYS_ACTIVE); + + @Override + public void register(MetricGroup rootGroup) throws IllegalArgumentException { + publicGroup.addMetric(new MetricNode(MetricType.SERVER_UPTIME, Capability.ALWAYS_ACTIVE, () -> randomNumber)); + rootGroup.addMetric(publicGroup); + } + + @Override + public void stop() { } + } + + // Instantiate library, add metric and start it + MetricProvider provider = new MetricProvider(); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat((ignored) -> {})); + commonLib.getMetricManager() + .register(provider); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + // Get expected output + ICapability cap = new FeatCapability(); + cap.enable(Capability.DEFAULT_FEATURES); + ObjectMapper mapper = new ObjectMapper(); + ObjectNode root = mapper.createObjectNode(); + provider.publicGroup.serialize(root, cap); + String metricOutput = Assertions.assertDoesNotThrow(() -> mapper.writeValueAsString(root)); + String lengthStr = new String(ByteBuffer.allocate(Integer.BYTES) + .order(ByteOrder.BIG_ENDIAN) + .putInt(metricOutput.length()) + .array()); + + // Check /public response + URLConnection conn = Assertions.assertDoesNotThrow(() -> { + URL heartbeatUrl = new URI(Constants.PUBLIC_URL).toURL(); + return heartbeatUrl.openConnection(); + }); + int httpStatus = Assertions.assertDoesNotThrow(() -> (((HttpURLConnection)conn).getResponseCode())); + Assertions.assertEquals(Integer.BYTES + metricOutput.length(), conn.getContentLength()); + String resp = Assertions.assertDoesNotThrow(() -> new BufferedReader(new InputStreamReader((InputStream) conn.getContent())).readLine()); + Assertions.assertEquals(lengthStr + metricOutput, resp); + Assertions.assertEquals(HttpStatus.OK.getCode(), httpStatus); + + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } +} -- GitLab From 3aa4f1d069ec324ed394799ed79befffc677584a Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 18:35:33 +0200 Subject: [PATCH 103/139] chore: (#47) Removing unused imports --- mods/common/src/test/java/LifecycleTest.java | 1 - mods/common/src/test/java/UrlTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/mods/common/src/test/java/LifecycleTest.java b/mods/common/src/test/java/LifecycleTest.java index ec56e25..63cc2b7 100644 --- a/mods/common/src/test/java/LifecycleTest.java +++ b/mods/common/src/test/java/LifecycleTest.java @@ -25,7 +25,6 @@ * SOFTWARE. */ -import io.javalin.http.HttpStatus; import me.peteras17.beacon.BeaconCommon; import me.peteras17.beacon.BeaconStatus; import me.peteras17.beacon.CommandManager; diff --git a/mods/common/src/test/java/UrlTest.java b/mods/common/src/test/java/UrlTest.java index 006e09c..4b445bd 100644 --- a/mods/common/src/test/java/UrlTest.java +++ b/mods/common/src/test/java/UrlTest.java @@ -34,7 +34,6 @@ import me.peteras17.beacon.CommandManager; import me.peteras17.beacon.cap.Capability; import me.peteras17.beacon.cap.FeatCapability; import me.peteras17.beacon.cap.ICapability; -import me.peteras17.beacon.data.ServerType; import me.peteras17.beacon.metrics.*; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; -- GitLab From 0d59ab0298ec434aae0a2017803de8c01c30bc08 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 19:44:50 +0200 Subject: [PATCH 104/139] test: (#47) Adding capabilities test --- .../me/peteras17/beacon/cap/Capability.java | 4 + .../peteras17/beacon/cap/FeatCapability.java | 2 +- .../src/test/java/CapabilitiesTest.java | 243 ++++++++++++++++++ 3 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 mods/common/src/test/java/CapabilitiesTest.java diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java index f86dfd2..e5ee84b 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java @@ -249,6 +249,10 @@ public enum Capability { * @param bitIndex Bit index */ Capability(int bitIndex) { + if(bitIndex < -1 || bitIndex >= FeatCapability.BITMAP_MAX_BITS) + { + throw new IllegalArgumentException("Unacceptable bit index"); + } this.bitIndex = bitIndex; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java index 23c1389..8aca86b 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java @@ -55,7 +55,7 @@ public class FeatCapability implements ICapability { @Override public void enable(Capability capability) { - if(capability != Capability.ALWAYS_ACTIVE && capability.bitIndex < BITMAP_MAX_BITS) { + if(capability != Capability.ALWAYS_ACTIVE) { bitmap = bitmap.setBit(capability.bitIndex); } } diff --git a/mods/common/src/test/java/CapabilitiesTest.java b/mods/common/src/test/java/CapabilitiesTest.java new file mode 100644 index 0000000..be0600a --- /dev/null +++ b/mods/common/src/test/java/CapabilitiesTest.java @@ -0,0 +1,243 @@ +import me.peteras17.beacon.cap.Capability; +import me.peteras17.beacon.cap.FeatCapability; +import me.peteras17.beacon.cap.ICapability; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.stream.IntStream; + +public class CapabilitiesTest { + + /** + * Tests setting and unsetting bits + */ + @Test + public void testSetUnset() + { + int[] allBits = IntStream.range(0, FeatCapability.BITMAP_MAX_BITS - 1).toArray(); + ICapability cap = new FeatCapability(); + + // Assert all bits at an initial state + for(int i : allBits) + { + Assertions.assertFalse(cap.supports(i)); + } + + // Enable all capabilities and assert values + cap.enable(Capability.DEFAULT_FEATURES); + for(Capability c : Capability.DEFAULT_FEATURES) + { + Assertions.assertTrue(cap.supports(c)); + } + + // Check that other bits are not set + int[] others = IntStream.range(0, FeatCapability.BITMAP_MAX_BITS - 1).filter(e -> Arrays.stream(Capability.DEFAULT_FEATURES).noneMatch(c -> c.bitIndex == e)).toArray(); + for(int i : others) + { + Assertions.assertFalse(cap.supports(i)); + } + + // Disable all capabilities + for(Capability c : Capability.DEFAULT_FEATURES) + { + cap.disable(c); + } + + // Check all bits are unset + for(int i : allBits) + { + Assertions.assertFalse(cap.supports(i)); + } + + // Check that double-setting does not unset + cap.enable(Capability.CRYPTO_EXCH_DH2048); + cap.enable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertTrue(cap.supports(Capability.CRYPTO_EXCH_DH2048)); + + // Check that double-unsetting does not set + cap.disable(Capability.CRYPTO_EXCH_DH2048); + cap.disable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertFalse(cap.supports(Capability.CRYPTO_EXCH_DH2048)); + + // Checking that setting both individually and in a list does not unset + cap.enable(Capability.CRYPTO_EXCH_DH2048); + cap.enable(new Capability[]{ Capability.CRYPTO_EXCH_DH2048 }); + Assertions.assertTrue(cap.supports(Capability.CRYPTO_EXCH_DH2048)); + } + + /** + * Test capabilities intersection (AND operation) + */ + @Test + public void testIntersection() + { + // Test non-overlapping capabilities + // Example: 0b1100 AND 0b0011 = 0b0000 + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + // Sanity check + Assertions.assertTrue(cap1.equals(emptyCap)); + + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + cap2.enable(Capability.CRYPTO_EXCH_DH4096); + cap1.intersect(cap2); + Assertions.assertFalse(cap2.equals(emptyCap)); + Assertions.assertTrue(cap1.equals(emptyCap)); + } + + + // Test fully-overlapping capabilities + // Example: 0b0011 AND 0b0011 = 0b0011 + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + cap2.enable(Capability.CRYPTO_EXCH_DH2048); + cap1.intersect(cap2); + Assertions.assertTrue(cap1.equals(cap2)); + Assertions.assertFalse(cap1.equals(emptyCap)); + } + + // Test partially-overlapping capabilities + // Example: 0b1110 AND 0b0111 = 0b0110 + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + cap1.enable(Capability.CRYPTO_EXCH_RSA2048); + cap2.enable(Capability.CRYPTO_EXCH_DH2048); + cap2.enable(Capability.CRYPTO_SYMM_CHACHA20POLY1305); + cap1.intersect(cap2); + + Assertions.assertFalse(cap1.equals(cap2)); + Assertions.assertFalse(cap1.equals(emptyCap)); + Assertions.assertFalse(cap2.equals(emptyCap)); + + Assertions.assertTrue(cap1.supports(Capability.CRYPTO_EXCH_DH2048)); // Only overlap + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_EXCH_RSA2048)); // Not overlapping + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_SYMM_CHACHA20POLY1305)); // Not overlapping + } + + // Test subset capabilities, on A = A AND B, if A is a subset of B + // Example 0b0111 AND 0b0010 = 0b0010 + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + cap2.enable(Capability.CRYPTO_EXCH_DH2048); + cap2.enable(Capability.CRYPTO_EXCH_RSA2048); + cap2.enable(Capability.CRYPTO_SYMM_CHACHA20POLY1305); + cap1.intersect(cap2); + + Assertions.assertFalse(cap1.equals(cap2)); + Assertions.assertFalse(cap1.equals(emptyCap)); + + Assertions.assertTrue(cap1.supports(Capability.CRYPTO_EXCH_DH2048)); // Only overlap + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_EXCH_RSA2048)); // Not overlapping + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_SYMM_CHACHA20POLY1305)); // Not overlapping + } + + // Test subset capabilities, on A = A AND B, if A is a subset of B + // Example 0b0111 AND 0b0010 = 0b0010 + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + cap1.enable(Capability.CRYPTO_EXCH_RSA2048); + cap1.enable(Capability.CRYPTO_SYMM_CHACHA20POLY1305); + cap2.enable(Capability.CRYPTO_EXCH_DH2048); + cap1.intersect(cap2); + + Assertions.assertTrue(cap1.equals(cap2)); + Assertions.assertFalse(cap1.equals(emptyCap)); + + Assertions.assertTrue(cap1.supports(Capability.CRYPTO_EXCH_DH2048)); // Only overlap + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_EXCH_RSA2048)); // Not overlapping + Assertions.assertFalse(cap1.supports(Capability.CRYPTO_SYMM_CHACHA20POLY1305)); // Not overlapping + } + } + + /** + * Tests .equals() method + */ + @Test + public void testEquality() + { + ICapability cap1 = new FeatCapability(); + ICapability cap2 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + // Sanity check - all should be equal at an initial state + Assertions.assertTrue(cap1.equals(cap2)); + Assertions.assertTrue(cap1.equals(emptyCap)); + + // Enable capability on first capability + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertFalse(cap1.equals(emptyCap)); + Assertions.assertFalse(cap1.equals(cap2)); + + // Enable same capability on second capability + cap2.enable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertTrue(cap2.equals(cap1)); + Assertions.assertFalse(cap2.equals(emptyCap)); + + // Disable capability in both, and check again + cap1.disable(Capability.CRYPTO_EXCH_DH2048); + cap2.disable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertTrue(cap1.equals(emptyCap)); + Assertions.assertTrue(cap2.equals(emptyCap)); + } + + /** + * Test .import() and .export() + */ + @Test + public void testImportExport() + { + ICapability cap1 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + Assertions.assertArrayEquals(cap1.exportPayload(), emptyCap.exportPayload()); + cap1.enable(Capability.CRYPTO_EXCH_DH2048); + byte[] payload = cap1.exportPayload(); + Assertions.assertFalse(Arrays.equals(cap1.exportPayload(), emptyCap.exportPayload())); + + cap1.disable(Capability.CRYPTO_EXCH_DH2048); + Assertions.assertArrayEquals(cap1.exportPayload(), emptyCap.exportPayload()); + + cap1.importPayload(payload); + Assertions.assertFalse(Arrays.equals(cap1.exportPayload(), emptyCap.exportPayload())); + Assertions.assertArrayEquals(cap1.exportPayload(), payload); + } + + + /** + * Test that ALWAYS_ACTIVE capability is ignored + */ + @Test + public void testIgnoredValue() + { + ICapability cap1 = new FeatCapability(); + ICapability emptyCap = new FeatCapability(); + + Assertions.assertTrue(cap1.equals(emptyCap)); + + cap1.enable(Capability.ALWAYS_ACTIVE); + Assertions.assertTrue(cap1.equals(emptyCap)); + + cap1.disable(Capability.ALWAYS_ACTIVE); + Assertions.assertTrue(cap1.equals(emptyCap)); + } +} -- GitLab From 8ac8ae180787fb09f4c87a1023ad8d8190b99760 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Wed, 3 Sep 2025 19:57:16 +0200 Subject: [PATCH 105/139] test: (#47) Adding more tests --- .../src/test/java/CapabilitiesTest.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/mods/common/src/test/java/CapabilitiesTest.java b/mods/common/src/test/java/CapabilitiesTest.java index be0600a..0a4ae70 100644 --- a/mods/common/src/test/java/CapabilitiesTest.java +++ b/mods/common/src/test/java/CapabilitiesTest.java @@ -1,6 +1,4 @@ -import me.peteras17.beacon.cap.Capability; -import me.peteras17.beacon.cap.FeatCapability; -import me.peteras17.beacon.cap.ICapability; +import me.peteras17.beacon.cap.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -240,4 +238,33 @@ public class CapabilitiesTest { cap1.disable(Capability.ALWAYS_ACTIVE); Assertions.assertTrue(cap1.equals(emptyCap)); } + + /** + * Test .copy() metbod + */ + @Test + public void testCopy() + { + ICapability cap1 = new FeatCapability(); + cap1.enable(Capability.CRYPTO_EXCH_ECDHP256); + + ICapability cap2 = cap1.copy(); + Assertions.assertTrue(cap1.equals(cap2)); + } + + /** + * Test cryptographic generation-related methods + */ + @Test + public void testCryptoGen() + { + CryptoCapability cap = new CryptoCapability(); + + Assertions.assertEquals(CryptoGen.LEGACY, cap.getCryptoGen()); + cap.setCryptoGen(CryptoGen.CURRENT); + Assertions.assertEquals(CryptoGen.CURRENT, cap.getCryptoGen()); + + Assertions.assertEquals(CryptoGen.CURRENT, CryptoGen.of(CryptoGen.CURRENT.ordinal())); + Assertions.assertNull(CryptoGen.of(Integer.MAX_VALUE)); // Unknown value + } } -- GitLab From 1ffe19260bd117c9d1eb66263ad081294f509103 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 4 Sep 2025 00:29:08 +0200 Subject: [PATCH 106/139] (#20) Added Metrics and logs receival, Command sending. --- web/models/server.py | 54 +++++++++++++++++++++++++++++++++++++++ web/routes/utils.py | 61 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 112 insertions(+), 3 deletions(-) diff --git a/web/models/server.py b/web/models/server.py index 7ec2e66..a150557 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -55,4 +55,58 @@ class Server: self.socket = None # end def + def get_logs(self): + """ + Get the server logs via the socket connection. + Returns: + dict: The server logs or an error message. + """ + if not self.socket: + return {"status": "error", "message": "No socket connection"} + # end if + + log_response = self.socket.get_log_response() + if log_response: + return {"status": "ok", "logs": log_response.decode('utf-8')} + else: + return {"status": "error", "message": "No log response"} + # end if + # end def + + def get_metrics(self): + """ + Get the server metrics via the socket connection. + Returns: + dict: The server metrics or an error message. + """ + if not self.socket: + return {"status": "error", "message": "No socket connection"} + # end if + + metric_response = self.socket.get_metric_response() + if metric_response: + return {"status": "ok", "metrics": metric_response.decode('utf-8')} + else: + return {"status": "error", "message": "No metric response"} + # end if + # end def + + def exec_command(self, command: str): + """ + Execute a command on the server via the socket connection. + Args: + command (str): The command to execute. + Returns: + dict: The result of the command execution or an error message. + """ + if not self.socket: + return {"status": "error", "message": "No socket connection"} + # end if + + if self.socket.send_command(command): + return {"status": "ok", "message": f"Command '{command}' sent"} + else: + return {"status": "error", "message": f"Failed to send command '{command}'"} + # end if + # end class diff --git a/web/routes/utils.py b/web/routes/utils.py index cbd17cb..d51f041 100644 --- a/web/routes/utils.py +++ b/web/routes/utils.py @@ -98,6 +98,10 @@ class SocketConnection: self.socket = None self.message_queue = [] self.message_queue_lock = threading.Lock() + self.metrics_response = None + self.metric_lock = threading.Lock() + self.log_response = None + self.log_lock = threading.Lock() self.message_event = threading.Event() self.key_exchange_protocol = None # end def @@ -280,12 +284,50 @@ class SocketConnection: def on_message(self, wsapp, message): log.debug(f"Received WebSocket message [{Opcode(base64.b64decode(message)[0])}]: {message}") - with self.message_queue_lock: - self.message_queue.append(message) - # end with + opcode = Opcode(base64.b64decode(message)[0]) + if opcode == Opcode.MTR: + log.debug("Metrics response") + self.handle_metric_response(message[1:]) + elif opcode == Opcode.LOG: + log.debug("Log response") + self.handle_log_response(message[1:]) + else: + with self.message_queue_lock: + self.message_queue.append(message) + # end with + # end if self.message_event.set() # end def + def handle_metric_response(self, metrics): + metrics = base64.b64decode(str(metrics)) + with self.metric_lock: + self.metrics_response = metrics + # end with + # end def + + def get_metric_response(self): + with self.metric_lock: + metrics_response = self.metrics_response + self.metrics_response = None + # end with + return metrics_response + # end def + + def handle_log_response(self, log): + log = base64.b64decode(str(log)) + with self.log_lock: + self.log_response = log + # end with + # end def + + def get_log_response(self): + with self.log_lock: + log_response = self.log_response + self.log_response = None + # end with + return log_response + # end def def on_error(self, wsapp, error): log.error(f"WebSocket error: {error}") @@ -302,5 +344,18 @@ class SocketConnection: threading.Thread(target=self.handshake).start() # end def + def send_command(self, command: str) -> bool: + try: + self.send(bytes([Opcode.CMD.value]) + base64.b64encode(command.encode('utf-8'))) + response = base64.b64decode(str(self.receive())) + if response[0] == Opcode.ACK.value: + return True + # end if + except Exception as e: + log.warning(f"Send command error: {e}") + # end try + return False + # end def + # end class \ No newline at end of file -- GitLab From c5e3e2d116d94624ff1f00a7b2ef4fd07b2c7a54 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Thu, 4 Sep 2025 01:12:19 +0200 Subject: [PATCH 107/139] test: (#47) Adding initial WebSocket tests --- mods/common/build.gradle.kts | 7 ++ .../me/peteras17/beacon/SocketManager.java | 2 + mods/common/src/test/java/Constants.java | 5 +- mods/common/src/test/java/SocketClient.java | 85 +++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 mods/common/src/test/java/SocketClient.java diff --git a/mods/common/build.gradle.kts b/mods/common/build.gradle.kts index 1a52a05..e304b24 100644 --- a/mods/common/build.gradle.kts +++ b/mods/common/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { implementation("org.apache.logging.log4j:log4j-api:2.20.0") // Required for log interception implementation("org.apache.logging.log4j:log4j-core:2.20.0") // Required for log interception implementation("com.fasterxml.jackson.core:jackson-core:2.19.1") // Required to transform objects into JSON strings + implementation("org.glassfish.tyrus.bundles:tyrus-standalone-client:1.20") // Required to test WebSocket testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") } @@ -62,6 +63,12 @@ tasks.jacocoTestReport { // Relocate libraries so Javalin can still work. Tutorial at https://javalin.io/tutorials/javalin-and-minecraft-servers tasks.shadowJar { + dependencies { + exclude(dependency("org.glassfish.tyrus.bundles:tyrus-standalone-client:1.20")) + exclude(dependency("org.junit:junit-bom:5.10.0")) + exclude(dependency("org.junit.jupiter:junit-jupiter")) + } + relocate("io.javalin:javalin:6.7.0", "shadow.io.javalin") relocate("org.slf4j:slf4j-simple:2.0.17", "shadow.org.slf4j") relocate("com.fasterxml.jackson.core:jackson-databind:2.13.2", "shadow.com.fasterxml.jackson.core") diff --git a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java index 70ab83f..676a26d 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java @@ -242,10 +242,12 @@ public class SocketManager { } catch(IllegalArgumentException e) { LOGGER.warn("Socket message dropped: {}", e.getMessage()); sendOp(new Nok(e.getMessage())); + _socket.closeSession(CloseStatus.PROTOCOL, "Protocol violated"); return; } catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { LOGGER.warn("Failed to create operation object from payload: {}", e.getMessage()); sendOp(new Nok(e.getMessage())); + _socket.closeSession(CloseStatus.BAD_DATA, "Invalid data"); return; } diff --git a/mods/common/src/test/java/Constants.java b/mods/common/src/test/java/Constants.java index 2709f01..7abdddd 100644 --- a/mods/common/src/test/java/Constants.java +++ b/mods/common/src/test/java/Constants.java @@ -27,8 +27,9 @@ public class Constants { static final int JAVALIN_PORT = 25566; - static final String JAVALIN_URL = "http://127.0.0.1:" + JAVALIN_PORT; + static final String JAVALIN_IP = "127.0.0.1"; + static final String JAVALIN_URL = "http://" + JAVALIN_IP + ":" + JAVALIN_PORT; static final String HEARTBEAT_URL = JAVALIN_URL + "/heartbeat"; static final String PUBLIC_URL = JAVALIN_URL + "/public"; - static final String SOCKET_URL = JAVALIN_URL + "/socket"; + static final String SOCKET_URL = "ws://" + JAVALIN_IP + ":" + JAVALIN_PORT + "/socket"; } diff --git a/mods/common/src/test/java/SocketClient.java b/mods/common/src/test/java/SocketClient.java new file mode 100644 index 0000000..7aca6b6 --- /dev/null +++ b/mods/common/src/test/java/SocketClient.java @@ -0,0 +1,85 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 03/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +import javax.websocket.*; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.ByteBuffer; +import java.util.concurrent.CountDownLatch; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +@SuppressWarnings("unused") +@ClientEndpoint +public class SocketClient { + private Session _session; + private final Consumer _onOpen; + private final BiConsumer _onClose; + private final BiConsumer _onMessage; + private final CountDownLatch countDownLatch; + + SocketClient(String url, Consumer onOpen, BiConsumer onClose, BiConsumer onMessage) throws DeploymentException, IOException, URISyntaxException { + _onOpen = onOpen; + _onClose = onClose; + _onMessage = onMessage; + countDownLatch = new CountDownLatch(1); + + WebSocketContainer container = ContainerProvider.getWebSocketContainer(); + container.connectToServer(this, new URI(url)); + } + + @OnOpen + public void onOpen(Session session) { + _session = session; + _onOpen.accept(session); + } + + @OnMessage + public void onMessage(String message) { + _onMessage.accept(this, java.util.Base64.getDecoder().decode(message.substring(1, message.length()-1))); + } + + @OnClose + public void onClose(Session session, CloseReason reason) { + _onClose.accept(session, reason); + countDownLatch.countDown(); + } + + public void close(CloseReason reason) throws IOException { + _session.close(reason); + } + + public void sendMessage(byte[] msg) throws Exception { + ByteBuffer buffer = ByteBuffer.wrap(msg); + _session.getBasicRemote().sendBinary(buffer); + } + + public void waitClose() throws InterruptedException { + countDownLatch.await(); + } +} \ No newline at end of file -- GitLab From 7cd87ff62b8b540af44f61a7e004fa19513e0500 Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Thu, 4 Sep 2025 01:41:08 +0200 Subject: [PATCH 108/139] test: (#47) NOW actually adding initial WebSocket tests... --- mods/common/src/test/java/WebSocketTest.java | 280 +++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 mods/common/src/test/java/WebSocketTest.java diff --git a/mods/common/src/test/java/WebSocketTest.java b/mods/common/src/test/java/WebSocketTest.java new file mode 100644 index 0000000..d2d3975 --- /dev/null +++ b/mods/common/src/test/java/WebSocketTest.java @@ -0,0 +1,280 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 03/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +import me.peteras17.beacon.BeaconCommon; +import me.peteras17.beacon.BeaconStatus; +import me.peteras17.beacon.cap.*; +import me.peteras17.beacon.socket.IOperation; +import me.peteras17.beacon.socket.Opcode; +import me.peteras17.beacon.socket.ops.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import javax.websocket.*; +import java.io.IOException; +import java.util.AbstractMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + + +public class WebSocketTest { + + private static final ICapability featureCap = new FeatCapability(); + private static final CryptoCapability cryptoCap = new CryptoCapability(); + + private static final byte[][] DATA_CONNECTION_TEST = new byte[][] + { + new byte[] { }, // No data + new byte[] { '\12', '\34', '\56' }, // Random data + }; + + /** + * Array of operations needed for a handshake to be concluded correctly + * To be configured inside the test + */ + private final Map.Entry[] DATA_VALID_HANDSHAKE = new Map.Entry[]{ + new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), + new AbstractMap.SimpleEntry<>(new Sel(), Opcode.ACK), + new AbstractMap.SimpleEntry<>(new Cap(), Opcode.CAP), + new AbstractMap.SimpleEntry<>(new Ack(), Opcode.INF), + new AbstractMap.SimpleEntry<>(new WebMtr(), Opcode.MTR) + }; + + /** + * Array of operations needed for a handshake to be concluded with a retry + * To be configured inside the test + */ + private final Map.Entry[] DATA_RETRIED_HANDSHAKE = new Map.Entry[]{ + new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), + new AbstractMap.SimpleEntry<>(new Sel(), Opcode.RTY), + new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), + new AbstractMap.SimpleEntry<>(new Sel(), Opcode.ACK), + new AbstractMap.SimpleEntry<>(new Cap(), Opcode.CAP), + new AbstractMap.SimpleEntry<>(new Ack(), Opcode.INF), + new AbstractMap.SimpleEntry<>(new WebMtr(), Opcode.MTR) + }; + + /** + * Array of operations needed for a handshake to fail (after a retry) + * To be configured inside the test + */ + private final Map.Entry[] DATA_FAILED_HANDSHAKE = new Map.Entry[]{ + new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), + new AbstractMap.SimpleEntry<>(new Sel(), Opcode.RTY), + new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), + new AbstractMap.SimpleEntry<>(new Sel(), null) // No response when handshake fails + }; + + private static final BeaconCommon commonLib = new BeaconCommon(); + + + @BeforeAll + public static void suiteSetup() { + // Instantiate library, and start it + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat((mgr) -> {})); + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); + + featureCap.enable(Capability.DEFAULT_FEATURES); + cryptoCap.enable(Capability.DEFAULT_CRYPTO_ALGOS); + } + + @AfterAll + public static void suiteTeardown() { + // Stop Beacon + Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); + } + + @Test + public void testNominalLegacyConnection() + { + // Set legacy crypto gen - no crypto + cryptoCap.setCryptoGen(CryptoGen.LEGACY); + + // Disable logs + featureCap.disable(Capability.FEAT_LOGS); + + // Setup array of operations + ((Cry)DATA_VALID_HANDSHAKE[0].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Sel)DATA_VALID_HANDSHAKE[1].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Cap)DATA_VALID_HANDSHAKE[2].getKey()).capability.importPayload(featureCap.exportPayload()); + + AtomicInteger opIndex = new AtomicInteger(); + AtomicReference code = new AtomicReference<>(); + + Assertions.assertDoesNotThrow(() -> { + SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { + try { + // Check response opcode + if(payload[0] != DATA_VALID_HANDSHAKE[opIndex.get()].getValue().opNbr) + { + throw new AssertionError(); + } + + if(opIndex.incrementAndGet() >= DATA_VALID_HANDSHAKE.length) + { + c.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Test done")); + return; + } + + // Send next message + c.sendMessage(DATA_VALID_HANDSHAKE[opIndex.get()].getKey().serialize()); + + } catch (Exception ignored) { + try { + c.close(new CloseReason(CloseReason.CloseCodes.CLOSED_ABNORMALLY, "Test done")); + } catch (IOException ignored1) {} + } + }); + client.sendMessage(DATA_VALID_HANDSHAKE[opIndex.get()].getKey().serialize()); + client.waitClose(); + }); + + Assertions.assertEquals(CloseReason.CloseCodes.NORMAL_CLOSURE, code.get()); + } + + @Test + public void testRetriedLegacyConnection() + { + // Set legacy crypto gen - no crypto + cryptoCap.setCryptoGen(CryptoGen.LEGACY); + + // Disable logs + featureCap.disable(Capability.FEAT_LOGS); + + // Setup array of operations + ((Cry)DATA_RETRIED_HANDSHAKE[0].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Sel)DATA_RETRIED_HANDSHAKE[1].getKey()).capability.importPayload(new CryptoCapability().exportPayload()); + ((Cry)DATA_RETRIED_HANDSHAKE[2].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Sel)DATA_RETRIED_HANDSHAKE[3].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Cap)DATA_RETRIED_HANDSHAKE[4].getKey()).capability.importPayload(featureCap.exportPayload()); + + AtomicInteger opIndex = new AtomicInteger(); + AtomicReference code = new AtomicReference<>(); + + Assertions.assertDoesNotThrow(() -> { + SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { + try { + // Check response opcode + if(payload[0] != DATA_RETRIED_HANDSHAKE[opIndex.get()].getValue().opNbr) + { + throw new AssertionError(); + } + + if(opIndex.incrementAndGet() >= DATA_RETRIED_HANDSHAKE.length) + { + c.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Test done")); + return; + } + + // Send next message + c.sendMessage(DATA_RETRIED_HANDSHAKE[opIndex.get()].getKey().serialize()); + + } catch (Exception ignored) { + try { + c.close(new CloseReason(CloseReason.CloseCodes.CLOSED_ABNORMALLY, "Test done")); + } catch (IOException ignored1) {} + } + }); + client.sendMessage(DATA_RETRIED_HANDSHAKE[opIndex.get()].getKey().serialize()); + client.waitClose(); + }); + + Assertions.assertEquals(CloseReason.CloseCodes.NORMAL_CLOSURE, code.get()); + } + + @Test + public void testFailedLegacyConnection() + { + // Set legacy crypto gen - no crypto + cryptoCap.setCryptoGen(CryptoGen.LEGACY); + + // Disable logs + featureCap.disable(Capability.FEAT_LOGS); + + // Setup array of operations + ((Cry)DATA_FAILED_HANDSHAKE[0].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Sel)DATA_FAILED_HANDSHAKE[1].getKey()).capability.importPayload(new CryptoCapability().exportPayload()); + ((Cry)DATA_FAILED_HANDSHAKE[2].getKey()).capability.importPayload(cryptoCap.exportPayload()); + ((Sel)DATA_FAILED_HANDSHAKE[3].getKey()).capability.importPayload(new CryptoCapability().exportPayload()); + + AtomicInteger opIndex = new AtomicInteger(); + AtomicReference code = new AtomicReference<>(); + + Assertions.assertDoesNotThrow(() -> { + SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { + try { + // Check response opcode + if(payload[0] != DATA_FAILED_HANDSHAKE[opIndex.get()].getValue().opNbr) + { + throw new AssertionError(); + } + + if(opIndex.incrementAndGet() >= DATA_FAILED_HANDSHAKE.length) + { + c.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Test done")); + return; + } + + // Send next message + c.sendMessage(DATA_FAILED_HANDSHAKE[opIndex.get()].getKey().serialize()); + + } catch (Exception ignored) { + try { + c.close(new CloseReason(CloseReason.CloseCodes.CLOSED_ABNORMALLY, "Test done")); + } catch (IOException ignored1) {} + } + }); + client.sendMessage(DATA_FAILED_HANDSHAKE[opIndex.get()].getKey().serialize()); + client.waitClose(); + }); + + // Returned when the handshake fails + Assertions.assertEquals(CloseReason.CloseCodes.UNEXPECTED_CONDITION, code.get()); + } + + + @Test + public void testSocketConnection() + { + // All payloads should result in the websocket's connection being closed by the mod + for(byte[] payload : DATA_CONNECTION_TEST) + { + AtomicReference code = new AtomicReference<>(); + + Assertions.assertDoesNotThrow(() -> { + SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (ignoredC, ignoredS) -> {}); + client.sendMessage(payload); + client.waitClose(); + }); + + Assertions.assertEquals(CloseReason.CloseCodes.PROTOCOL_ERROR, code.get()); + } + } +} -- GitLab From c68345e6575607493471e5ce7b8cd872b698b648 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 4 Sep 2025 02:46:20 +0200 Subject: [PATCH 109/139] (#20) Now receives metrics and can send them to the client. Also fixed frontend to match better with backend. --- web/config.py | 2 +- web/models/server.py | 39 ++++-- web/routes/utils.py | 81 ++++++++--- web/routes/web.py | 9 +- web/templates/components/graphic_cpu.html | 6 +- web/templates/components/graphic_io.html | 8 +- web/templates/components/graphic_ram.html | 16 ++- .../components/horizontal_gauge.html | 12 +- web/templates/dashboard.html | 132 +++++++++++------- 9 files changed, 205 insertions(+), 100 deletions(-) diff --git a/web/config.py b/web/config.py index 4156ba1..ca77574 100644 --- a/web/config.py +++ b/web/config.py @@ -15,7 +15,7 @@ class Config: KeyExchangeProtocol.NONE, ] SYMMETRIC_PROTOCOLS = [] - CAPABILITIES = [Capabilities.OS] + CAPABILITIES = list(Capabilities) CRYPTO_BITMAP = None CAPABILITIES_BITMAP = None diff --git a/web/models/server.py b/web/models/server.py index a150557..2865c82 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -1,9 +1,11 @@ import requests import logging +import json log = logging.getLogger(__name__) class Server: + NO_SOCKET_ERROR = "No socket connection" def __init__(self, ip: str, port: int, name: str, description: str): self.ip = ip @@ -13,6 +15,13 @@ class Server: self.name = name self.description = description self.socket = None + # INFO + self.id = None + self.mod_version = None + ## JVM + self.jre_version = None + ## OS + self.os = None # end def def check_status(self) -> bool: @@ -55,42 +64,44 @@ class Server: self.socket = None # end def - def get_logs(self): + def get_logs(self) -> tuple[list, str | None]: """ Get the server logs via the socket connection. Returns: dict: The server logs or an error message. """ - if not self.socket: - return {"status": "error", "message": "No socket connection"} + if self.socket is None: + return [], self.NO_SOCKET_ERROR # end if log_response = self.socket.get_log_response() if log_response: - return {"status": "ok", "logs": log_response.decode('utf-8')} + logs = json.loads(log_response.decode('utf-8')) + return logs, None else: - return {"status": "error", "message": "No log response"} + return [], "No log response" # end if # end def - def get_metrics(self): + def get_metrics(self) -> tuple[dict, str | None]: """ Get the server metrics via the socket connection. Returns: - dict: The server metrics or an error message. + result: The server metrics. + error: An error message if applicable. """ - if not self.socket: - return {"status": "error", "message": "No socket connection"} + if self.socket is None: + return {}, self.NO_SOCKET_ERROR # end if metric_response = self.socket.get_metric_response() if metric_response: - return {"status": "ok", "metrics": metric_response.decode('utf-8')} + return json.loads(metric_response.decode('utf-8')), None else: - return {"status": "error", "message": "No metric response"} + return {}, "No metric response" # end if # end def - + def exec_command(self, command: str): """ Execute a command on the server via the socket connection. @@ -99,8 +110,8 @@ class Server: Returns: dict: The result of the command execution or an error message. """ - if not self.socket: - return {"status": "error", "message": "No socket connection"} + if self.socket is None: + return {"status": "error", "message": self.NO_SOCKET_ERROR} # end if if self.socket.send_command(command): diff --git a/web/routes/utils.py b/web/routes/utils.py index d51f041..ca300b4 100644 --- a/web/routes/utils.py +++ b/web/routes/utils.py @@ -25,6 +25,7 @@ def get_server_logs(server: Server): def get_server_metrics(server: Server): data, error = server.get_metrics() if error: + log.error(f"Error getting metrics: {error}") return {"status": "error", "error": error} # end if @@ -100,6 +101,7 @@ class SocketConnection: self.message_queue_lock = threading.Lock() self.metrics_response = None self.metric_lock = threading.Lock() + self.ask_metrics_thread = None self.log_response = None self.log_lock = threading.Lock() self.message_event = threading.Event() @@ -184,6 +186,10 @@ class SocketConnection: self.server.close_socket() return # end if + + self.ask_metrics_thread = threading.Thread(target=self.ask_metrics) + self.ask_metrics_thread.daemon = True + self.ask_metrics_thread.start() # end def def perform_cry_handshake(self, bitmap: BitArray) -> bool: @@ -194,7 +200,7 @@ class SocketConnection: # Send our bitmap self.send(bytes([Opcode.CRY.value]) + bitmap.bytes) # Receive their bitmap - response = base64.b64decode(str(self.receive())) + response = self.receive() if len(response) != 17 or response[0] != Opcode.CRY.value: if retries == self.MAX_RETRIES: self.send(bytes([Opcode.NOK.value])) @@ -212,8 +218,7 @@ class SocketConnection: self.send(bytes([Opcode.SEL.value]) + final_bitmap.bytes) # Receive their AND'd bitmap - response = str(self.receive()) - response = base64.b64decode(response) + response = self.receive() if response[0] != Opcode.ACK.value: if retries == self.MAX_RETRIES: @@ -240,7 +245,7 @@ class SocketConnection: try: self.send(bytes([Opcode.CAP.value]) + bitmap.bytes) - response = base64.b64decode(str(self.receive())) + response = self.receive() if response[0] != Opcode.CAP.value: return False # end if @@ -254,13 +259,14 @@ class SocketConnection: # end if self.send(bytes([Opcode.ACK.value])) - response = base64.b64decode(str(self.receive())) + response = self.receive() if response[0] != Opcode.INF.value: self.close() return False # end if log.debug(response) + self.populate_server_info(self.get_length_prefixed_data(response[1:])) return True except Exception as e: @@ -283,48 +289,77 @@ class SocketConnection: # end def def on_message(self, wsapp, message): - log.debug(f"Received WebSocket message [{Opcode(base64.b64decode(message)[0])}]: {message}") - opcode = Opcode(base64.b64decode(message)[0]) + decoded_message = base64.b64decode(message) + log.debug(f"Received WebSocket message [{Opcode(decoded_message[0])}]: {message}") + opcode = Opcode(decoded_message[0]) if opcode == Opcode.MTR: log.debug("Metrics response") - self.handle_metric_response(message[1:]) + self.handle_metric_response(decoded_message[1:]) elif opcode == Opcode.LOG: log.debug("Log response") - self.handle_log_response(message[1:]) + self.handle_log_response(decoded_message[1:]) else: with self.message_queue_lock: - self.message_queue.append(message) + self.message_queue.append(decoded_message) # end with # end if self.message_event.set() # end def + def populate_server_info(self, data: bytes): + log.debug(f"Populating server info: {data}") + # Populate server info from the data + import json + json_data = data.decode('utf-8') + server_info = json.loads(json_data).get("MOD") + self.server.id = server_info.get("MOD_SERVER_ID") + self.server.name = server_info.get("MOD_SERVER_NAME") + self.server.version = server_info.get("MOD_VERSION") + # end def + + def get_length_prefixed_data(self, data: str) -> bytes | None: + log.debug(data) + + if len(data) < 4: + return None + # end if + + length = int.from_bytes(data[:4], 'big', signed=False) + log.debug(data[:4]) + log.debug(length) + if len(data) < length + 4: + return None + # end if + + return data[4:length+4] + # end def + def handle_metric_response(self, metrics): - metrics = base64.b64decode(str(metrics)) + data = self.get_length_prefixed_data(metrics) + log.debug(f"Decoded metrics: {data}") with self.metric_lock: - self.metrics_response = metrics + self.metrics_response = data # end with # end def def get_metric_response(self): with self.metric_lock: metrics_response = self.metrics_response - self.metrics_response = None # end with return metrics_response # end def - def handle_log_response(self, log): - log = base64.b64decode(str(log)) + def handle_log_response(self, logs): + data = self.get_length_prefixed_data(logs) + log.debug(f"Decoded log: {data}") with self.log_lock: - self.log_response = log + self.log_response = data # end with # end def def get_log_response(self): with self.log_lock: log_response = self.log_response - self.log_response = None # end with return log_response # end def @@ -344,6 +379,18 @@ class SocketConnection: threading.Thread(target=self.handshake).start() # end def + def ask_metrics(self) -> bool: + while self.socket is not None: + try: + self.send(bytes([Opcode.MTR.value])) + except Exception as e: + log.warning(f"Ask metrics error: {e}") + # end try + log.debug("Waiting before asking metrics again...") + threading.Event().wait(10.0) + # end while + # end def + def send_command(self, command: str) -> bool: try: self.send(bytes([Opcode.CMD.value]) + base64.b64encode(command.encode('utf-8'))) diff --git a/web/routes/web.py b/web/routes/web.py index dbe7c30..ecca22b 100644 --- a/web/routes/web.py +++ b/web/routes/web.py @@ -1,13 +1,16 @@ from flask import Blueprint, render_template from config import MINECRAFT_SERVER, Config from routes.utils import * +import logging +log = logging.getLogger(__name__) web_bp = Blueprint("web", __name__) @web_bp.route("/") async def homepage(): - logs = get_server_logs(MINECRAFT_SERVER) - metrics = get_server_metrics(MINECRAFT_SERVER) + MINECRAFT_SERVER.get_socket() # start socket if not started + metrics = MINECRAFT_SERVER.get_metrics() + log.debug(f"Metrics: {metrics}") - return render_template("homepage.html", server=MINECRAFT_SERVER, logs=logs, metrics=metrics, update_metrics="server/metrics") + return render_template("homepage.html", server=MINECRAFT_SERVER, metrics=metrics, update_metrics="server/metrics") # end def diff --git a/web/templates/components/graphic_cpu.html b/web/templates/components/graphic_cpu.html index 49d5fe1..54c441a 100644 --- a/web/templates/components/graphic_cpu.html +++ b/web/templates/components/graphic_cpu.html @@ -6,12 +6,14 @@
            {% set component = "RAM" %} + {% set path = "ROOT.HOST.RAM" %} {% set gauge_id = "heapGauge" %} {% set used_key = "HEAP_USED" %} {% set max_key = "HEAP_MAX" %} @@ -66,6 +39,7 @@ {% set component = "CPU" %} + {% set path = "ROOT.HOST.CPU" %} {% set gauge_id = "cpuGauge" %} {% set used_key = "CPU_USAGE" %} {% set max_key = "CPU_MAX" %} @@ -82,6 +56,7 @@ {% set component = "IO" %} + {% set path = "ROOT.HOST.IO" %} {% set read_speed = "READ_SPEED" %} {% set write_speed = "WRITE_SPEED" %} {% set label1 = "Read Speed" %} @@ -126,11 +101,11 @@

            Uptime

            -

            32863917869

            -

            {{ server.ip }}

            -

            {{ server.port }}

            -

            6/8

            -

            50 hours

            +

            {% if server.id is not none %}{{ server.id }}{% endif %}

            +

            {{ server.ip }}

            +

            {{ server.port }}

            +

            6/8

            +

            50 hours

            Versions
            @@ -142,10 +117,10 @@

            Beacon

            -

            Windows Server 2016

            -

            Version 8 Update 461

            -

            1.18.1

            -

            v0.1

            +

            {% if server.os is not none %}{{ server.os }}{% endif %}

            +

            {% if server.jre_version is not none %}{{ server.jre_version }}{% endif %}

            +

            1.21.5

            +

            {% if server.mod_version is not none %}{{ server.mod_version }}{% endif %}

            @@ -175,25 +150,26 @@ // Function to update all gauges function updateAllGauges(json) { - if (typeof updateHeapGauge === "function") updateHeapGauge(json); - if (typeof updateNonHeapGauge === "function") updateNonHeapGauge(json); - if (typeof updateCpuGauge === "function") updateCpuGauge(json); + if (typeof updateHeapgauge === "function") updateHeapgauge(json); + if (typeof updateNonheapgauge === "function") updateNonheapgauge(json); + if (typeof updateCpugauge === "function") updateCpugauge(json); } // Function to update all graphs function updateAllGraphs(json) { if (typeof updateAreaChart_io === "function") updateAreaChart_io(json); - if (typeof updateAreaChart_cpu === "function") updateAreaChart_cpu(json); + if (typeof updateAreaChart_cpuGauge === "function") updateAreaChart_cpuGauge(json); if (typeof updateAreaChart === "function") updateAreaChart(json); } // Initial update - document.addEventListener("DOMContentLoaded", function() { - updateAllGauges(data); - }); + //document.addEventListener("DOMContentLoaded", function() { + // updateAllGauges(data); + //}); - // Fetch new data every 10 seconds - setInterval(function() { + // Function to fetch and update data + let first_run = true; + function fetchAndUpdateData() { fetch("/api/{{ update_metrics }}") .then(response => { if (!response.ok) throw new Error("No data"); @@ -202,14 +178,72 @@ .then(json => { if (json && json.data.ROOT) { let data = json.data; - data.timestamp = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }); + data = convertedData(data); updateAllGauges(data); updateAllGraphs(data); + if (first_run) { + first_run = false; + populateServerInfo(data); + } } }) - .catch(() => { + .catch((error) => { + console.error("Error fetching data:", error); // If fetch fails, do nothing (remain as is) }); - }, 10000); + } + + // Fetch about a second after loading + setTimeout(fetchAndUpdateData, 1000); + + // Then fetch new data every 10 seconds + setInterval(fetchAndUpdateData, 10000); + + function convertedData(data) { + // Convert RAM values from bytes to gigabytes + if (data.ROOT && data.ROOT.HOST && data.ROOT.HOST.RAM) { + const ram = data.ROOT.HOST.RAM; + for (const key in ram) { + if (ram.hasOwnProperty(key) && typeof ram[key] === 'number') { + ram[key] = ram[key] / (1024 ** 3); // Convert bytes to GB + } + } + } + + // Convert IO values from bytes/s to MB/s + if (data.ROOT && data.ROOT.HOST && data.ROOT.HOST.IO) { + const io = data.ROOT.HOST.IO; + for (const key in io) { + if (io.hasOwnProperty(key) && typeof io[key] === 'number') { + io[key] = io[key] / (1024 ** 2); // Convert bytes/s to MB/s + } + } + } + + // Convert timestamp to human-readable format + if (data.ROOT && data.ROOT.TIMESTAMP) { + data.ROOT.TIMESTAMP = new Date(data.ROOT.TIMESTAMP * 1000).toLocaleTimeString(undefined, { + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false + }); + } + return data; + } + + // Populate server info fields if available in data + function populateServerInfo(data) { + if (data.ROOT && data.ROOT.HOST) { + const host = data.ROOT.HOST; + if (host.OS && host.OS.OS_NAME) document.getElementById("server-os").textContent = host.OS.OS_NAME; + if (host.JVM && host.JVM.JRE_VERSION) document.getElementById("server-jre").textContent = host.JVM.JRE_VERSION; + } + if (data.ROOT && data.ROOT.MOD) { + const mod = data.ROOT.MOD; + if (mod.MOD_VERSION) document.getElementById("server-beacon").textContent = mod.MOD_VERSION; + if (mod.MOD_SERVER_ID) document.getElementById("server-id").textContent = mod.MOD_SERVER_ID; + } + } {% endblock %} -- GitLab From c1c85a34716d967a872ed613b53f7e4482bdcc83 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 4 Sep 2025 02:48:30 +0200 Subject: [PATCH 110/139] (#20) Removed less useful logs. --- web/routes/utils.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/routes/utils.py b/web/routes/utils.py index ca300b4..1f3b1c2 100644 --- a/web/routes/utils.py +++ b/web/routes/utils.py @@ -318,15 +318,11 @@ class SocketConnection: # end def def get_length_prefixed_data(self, data: str) -> bytes | None: - log.debug(data) - if len(data) < 4: return None # end if length = int.from_bytes(data[:4], 'big', signed=False) - log.debug(data[:4]) - log.debug(length) if len(data) < length + 4: return None # end if -- GitLab From e81d1b2d04e1122086971d86a89e23fd4e3487df Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Thu, 4 Sep 2025 03:48:05 +0200 Subject: [PATCH 111/139] (#20) Added sending command and fixed a few issues left and right. --- web/models/server.py | 1 + web/routes/utils.py | 4 +- web/templates/components/graphic_cpu.html | 5 +-- web/templates/components/graphic_io.html | 2 +- .../components/horizontal_gauge.html | 3 +- web/templates/dashboard.html | 42 +++++++++++++++++-- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/web/models/server.py b/web/models/server.py index 2865c82..16bbe93 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -119,5 +119,6 @@ class Server: else: return {"status": "error", "message": f"Failed to send command '{command}'"} # end if + # end def # end class diff --git a/web/routes/utils.py b/web/routes/utils.py index 1f3b1c2..61ecc83 100644 --- a/web/routes/utils.py +++ b/web/routes/utils.py @@ -389,7 +389,9 @@ class SocketConnection: def send_command(self, command: str) -> bool: try: - self.send(bytes([Opcode.CMD.value]) + base64.b64encode(command.encode('utf-8'))) + log.debug(f"Sending command: {command}") + cmd = command.encode('utf-8') + self.send(bytes([Opcode.CMD.value]) + len(cmd).to_bytes(4, 'big') + cmd) response = base64.b64decode(str(self.receive())) if response[0] == Opcode.ACK.value: return True diff --git a/web/templates/components/graphic_cpu.html b/web/templates/components/graphic_cpu.html index 54c441a..7a4376c 100644 --- a/web/templates/components/graphic_cpu.html +++ b/web/templates/components/graphic_cpu.html @@ -9,11 +9,10 @@ if (json.ROOT.TIMESTAMP in areaChart_{{ gauge_id }}.data.labels) return; // Skip if timestamp already exists const used = json.ROOT.HOST.CPU["{{ used_key }}"]; - const max = 100; - const ratio = (used / max) * 100; + const ratio = used * 100; - areaChart_{{ gauge_id }}.data.labels = [json.ROOT.TIMESTAMP]; + areaChart_{{ gauge_id }}.data.labels.push(json.ROOT.TIMESTAMP); if (ratio !== undefined && ratio !== null && !isNaN(ratio)) areaChart_{{ gauge_id }}.data.datasets[0].data.push(ratio); areaChart_{{ gauge_id }}.update(); diff --git a/web/templates/components/graphic_io.html b/web/templates/components/graphic_io.html index 8a8485f..03f2981 100644 --- a/web/templates/components/graphic_io.html +++ b/web/templates/components/graphic_io.html @@ -14,7 +14,7 @@ const used1 = json.ROOT.HOST.IO["{{ read_speed }}"]; const used2 = json.ROOT.HOST.IO["{{ write_speed }}"]; - areaChart_io.data.labels = [json.ROOT.TIMESTAMP]; + areaChart_io.data.labels.push(json.ROOT.TIMESTAMP); if (used1 !== undefined && used1 !== null && !isNaN(used1)) areaChart_io.data.datasets[0].data.push(used1); if (used2 !== undefined && used2 !== null && !isNaN(used2)) diff --git a/web/templates/components/horizontal_gauge.html b/web/templates/components/horizontal_gauge.html index 933a025..1275d49 100644 --- a/web/templates/components/horizontal_gauge.html +++ b/web/templates/components/horizontal_gauge.html @@ -8,10 +8,11 @@ +
            @@ -105,7 +125,7 @@

            {{ server.ip }}

            {{ server.port }}

            6/8

            -

            50 hours

            +

            {% if server.uptime is not none %}{{ server.uptime }}{% endif %}

            Versions
            @@ -181,6 +201,7 @@ data = convertedData(data); updateAllGauges(data); updateAllGraphs(data); + updateUptime(data); if (first_run) { first_run = false; populateServerInfo(data); @@ -245,5 +266,20 @@ if (mod.MOD_SERVER_ID) document.getElementById("server-id").textContent = mod.MOD_SERVER_ID; } } + + // Update uptime display if available in data + function updateUptime(data) { + if (data.ROOT && data.ROOT.SERVER && data.ROOT.SERVER.PROPERTIES) + { + const properties = data.ROOT.SERVER.PROPERTIES; + if (properties.SERVER_UPTIME !== undefined) { + const seconds = properties.SERVER_UPTIME; + const hours = Math.floor(seconds / 3600).toString().padStart(2, '0'); + const minutes = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0'); + const secs = Math.floor(seconds % 60).toString().padStart(2, '0'); + document.getElementById("server-uptime").textContent = `${hours}h ${minutes}m ${secs}s`; + } + } + } {% endblock %} -- GitLab From cc001802d9f8b2cb0408bd2c8a0233d289226eec Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Thu, 4 Sep 2025 12:17:37 +0200 Subject: [PATCH 112/139] fix: (#20) Fixing missing metrics --- web/templates/dashboard.html | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 5f08730..8fbb284 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -124,7 +124,7 @@

            {% if server.id is not none %}{{ server.id }}{% endif %}

            {{ server.ip }}

            {{ server.port }}

            -

            6/8

            +

            {% if server.player_count is not none and server.player_max is not none %}{{ server.player_count }}/{{ server.player_max }}{% endif %}

            {% if server.uptime is not none %}{{ server.uptime }}{% endif %}

            @@ -139,7 +139,7 @@

            {% if server.os is not none %}{{ server.os }}{% endif %}

            {% if server.jre_version is not none %}{{ server.jre_version }}{% endif %}

            -

            1.21.5

            +

            {% if server.mc_version is not none %}{{ server.mc_version }}{% endif %}

            {% if server.mod_version is not none %}{{ server.mod_version }}{% endif %}

            @@ -202,6 +202,7 @@ updateAllGauges(data); updateAllGraphs(data); updateUptime(data); + updatePlayerCount(data); if (first_run) { first_run = false; populateServerInfo(data); @@ -281,5 +282,13 @@ } } } + + function updatePlayerCount(data) { + if (data.ROOT && data.ROOT.SERVER && data.ROOT.SERVER.PROPERTIES) { + const properties = data.ROOT.SERVER.PROPERTIES; + if (properties.SERVER_PLAYER_COUNT && properties.SERVER_MAX_PLAYER_COUNT) document.getElementById("server-player-count").textContent = `${properties.SERVER_PLAYER_COUNT}/${properties.SERVER_MAX_PLAYER_COUNT}`; + if (properties.SERVER_MINECRAFT_VERSION) document.getElementById("server-minecraft").textContent = `${properties.SERVER_MINECRAFT_VERSION}` + } + } {% endblock %} -- GitLab From 51fa03d0de94fc58abebaee916e622ac5995bb62 Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Thu, 4 Sep 2025 16:59:35 +0200 Subject: [PATCH 113/139] Resolve "CSS MIME in script" --- scripts/vm_setup.sh | 70 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 scripts/vm_setup.sh diff --git a/scripts/vm_setup.sh b/scripts/vm_setup.sh new file mode 100644 index 0000000..07e8375 --- /dev/null +++ b/scripts/vm_setup.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# Automatic Beacon landing page VM setup + +LANDING_FOLDER=/home/pdg/landing +LANDING_WWW_FOLDER="$LANDING_FOLDER/www" + +# Update all packages +apt update -y +apt upgrade -y + +# Install Lighttpd + SSL Python, Certbot, rsync, and htop +apt install -y lighttpd lighttpd-mod-openssl python3.11 certbot rsync htop + +# Setup folders +mkdir -p $LANDING_WWW_FOLDER + +# Obtain certificate +read -p "Enter this virtual machine's DNS: " HOST_DNS +certbot certonly --webroot -w /var/www/html/ -d $HOST_DNS +CERT_FOLDER="/etc/letsencrypt/live/$HOST_DNS" + +# Setup Lighttpd with SSL +cat > $LANDING_FOLDER/lighttpd.conf << EOL +# Setup server +server.name = "$HOST_DNS" +server.errorlog = "$LANDING_FOLDER/error.log" +server.document-root = "$LANDING_WWW_FOLDER" +server.port = 443 +server.username = "www-data" +server.groupname = "www-data" +server.modules += ( + "mod_openssl", + "mod_redirect" + ) + +# Associate .html with, well, HTML, and .css with CSS +mimetype.assign = ( + ".html" => "text/html", + ".css" => "text/css" + ) + +# Set index files +index-file.names = ( "index.html" ) + +# Set certificates for HTTPS +\$SERVER["socket"] == ":443" { + ssl.engine = "enable" + ssl.pemfile = "$CERT_FOLDER/fullchain.pem" + ssl.privkey = "$CERT_FOLDER/privkey.pem" +} + +# Redirect HTTP -> HTTPS +\$HTTP["scheme"] == "http" { + \$HTTP["host"] == "$HOST_DNS" { + url.redirect = ("/.*" => "https://$HOST_DNS\$0") + } +} +EOL + +# Create error file and chown it +touch "$LANDING_FOLDER/error.log" +chown www-data:www-data "$LANDING_FOLDER/error.log" + +# Move previous configuration and link to new one +mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.original +ln -s "$LANDING_FOLDER/lighttpd.conf" "/etc/lighttpd/lighttpd.conf" + +# Restart lighttpd +systemctl restart lighttpd \ No newline at end of file -- GitLab From 2546c3570bc8a20934148dd9bab0562adee7cece Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Thu, 4 Sep 2025 23:12:50 +0200 Subject: [PATCH 114/139] chore: (#42) Adding command to build and push dockerfile --- .gitlab-ci.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f9db4a5..0f8c75b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,11 +43,15 @@ stages: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" # Disables TLS so Docker client can talk to the daemon without TLS setup before_script: - - docker info + - echo "$DOCKER_HUB_TOKEN" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin script: - cd ${CI_PROJECT_DIR} - rules: - - if: $CI_COMMIT_REF_PROTECTED == "true" + - VERSION=$(cat VERSION.txt) + - docker build -t $DOCKER_REGISTRY_USER/beacon:latest -t $DOCKER_REGISTRY_USER/beacon:$VERSION . + - docker push $DOCKER_REGISTRY_USER/beacon:latest + - docker push $DOCKER_REGISTRY_USER/beacon:$VERSION + after_script: + - docker logout $DOCKER_REGISTRY -- GitLab From cba7b2b256d559510c890d4a4d30494b59815716 Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Thu, 4 Sep 2025 23:14:25 +0200 Subject: [PATCH 115/139] fix: (#42) Using temporary token to test CI --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0f8c75b..33bcf3e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,7 +43,7 @@ stages: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" # Disables TLS so Docker client can talk to the daemon without TLS setup before_script: - - echo "$DOCKER_HUB_TOKEN" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin + - echo "$DOCKER_HUB_TOKEN_TMP" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin script: - cd ${CI_PROJECT_DIR} - VERSION=$(cat VERSION.txt) -- GitLab From 0bc13ac5a2ab1568bf31a08b17b033731a8e5a29 Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Thu, 4 Sep 2025 23:20:20 +0200 Subject: [PATCH 116/139] fix: (#42) Specifying Dockefile to use --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 33bcf3e..0dd8523 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -47,7 +47,7 @@ stages: script: - cd ${CI_PROJECT_DIR} - VERSION=$(cat VERSION.txt) - - docker build -t $DOCKER_REGISTRY_USER/beacon:latest -t $DOCKER_REGISTRY_USER/beacon:$VERSION . + - docker build --file scripts/Dockerfile -t $DOCKER_REGISTRY_USER/beacon:latest -t $DOCKER_REGISTRY_USER/beacon:$VERSION . - docker push $DOCKER_REGISTRY_USER/beacon:latest - docker push $DOCKER_REGISTRY_USER/beacon:$VERSION after_script: -- GitLab From 362016c3cc6dc66ae05c6a8a8bc1dd163cd0e006 Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Thu, 4 Sep 2025 23:33:45 +0200 Subject: [PATCH 117/139] chore: (#42) Limiting to main branch --- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0dd8523..ec35d21 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,7 +43,7 @@ stages: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" # Disables TLS so Docker client can talk to the daemon without TLS setup before_script: - - echo "$DOCKER_HUB_TOKEN_TMP" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin + - echo "$DOCKER_HUB_TOKEN" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin script: - cd ${CI_PROJECT_DIR} - VERSION=$(cat VERSION.txt) @@ -52,6 +52,8 @@ stages: - docker push $DOCKER_REGISTRY_USER/beacon:$VERSION after_script: - docker logout $DOCKER_REGISTRY + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_COMMIT_REF_PROTECTED == "true" -- GitLab From 4f1201b3c48f2d61c475af97416e7075e5758b11 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 11:07:42 +0200 Subject: [PATCH 118/139] (#42) Added arguments and environment variables. --- scripts/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/Dockerfile b/scripts/Dockerfile index a557c79..9fddafc 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -1,6 +1,13 @@ # Use official Python image as base FROM python:3.11-slim +# Environment variables +ARG IP_ADDRESS=127.0.0.1 +ARG PORT=25565 + +ENV SERVER_IP_ADDRESS=${IP_ADDRESS} +ENV SERVER_PORT=${PORT} + # Set working directory WORKDIR /app -- GitLab From cd7bce8dd4355c050e37e15d3803a49892d2f28c Mon Sep 17 00:00:00 2001 From: PS-HEIG Date: Fri, 5 Sep 2025 12:00:08 +0200 Subject: [PATCH 119/139] test: (#47) Moving some tests, adding more socket tests --- .../me/peteras17/beacon/SocketManager.java | 28 ++++ .../java/{ => generic}/LifecycleTest.java | 7 +- .../src/test/java/{ => generic}/UrlTest.java | 7 +- .../peteras17/beacon/SocketManagerTest.java} | 154 ++++++++++++++++-- .../beacon/cap/CryptoCapabilityTest.java | 50 ++++++ .../beacon/cap/FeatCapabilityTest.java} | 57 ++++--- .../src/test/java/{ => utils}/Constants.java | 18 +- .../test/java/{ => utils}/SocketClient.java | 37 ++++- 8 files changed, 306 insertions(+), 52 deletions(-) rename mods/common/src/test/java/{ => generic}/LifecycleTest.java (97%) rename mods/common/src/test/java/{ => generic}/UrlTest.java (98%) rename mods/common/src/test/java/{WebSocketTest.java => me/peteras17/beacon/SocketManagerTest.java} (62%) create mode 100644 mods/common/src/test/java/me/peteras17/beacon/cap/CryptoCapabilityTest.java rename mods/common/src/test/java/{CapabilitiesTest.java => me/peteras17/beacon/cap/FeatCapabilityTest.java} (85%) rename mods/common/src/test/java/{ => utils}/Constants.java (70%) rename mods/common/src/test/java/{ => utils}/SocketClient.java (68%) diff --git a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java index 676a26d..9d20d8e 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java @@ -289,6 +289,9 @@ public class SocketManager { _retriedCryptoNeg = false; _socket.enableAutomaticPings(); LOGGER.info("WebSocket connected to {}", ctx.session.getRemoteAddress()); + + // Make this thread more important, to not make peer wait too long + Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1); } } @@ -311,6 +314,9 @@ public class SocketManager { destroySocket(); LOGGER.info("Socket closed with reason: {}", ctx.reason()); + + // Revert priority + Thread.currentThread().setPriority(Thread.NORM_PRIORITY); } } @@ -583,4 +589,26 @@ public class SocketManager { return preferred; } + + /** + * Gets this socket's state + * @return Web socket state + */ + SocketState getState() + { + return _state; + } + + /** + * Gets the remote peer's address if socket is open, or null if closed + * @return Remote peer's address + */ + @SuppressWarnings("unused") + String getRemoteAddr() + { + if(_socket != null) { + return _socket.session.getRemoteAddress().toString(); + } + return null; + } } diff --git a/mods/common/src/test/java/LifecycleTest.java b/mods/common/src/test/java/generic/LifecycleTest.java similarity index 97% rename from mods/common/src/test/java/LifecycleTest.java rename to mods/common/src/test/java/generic/LifecycleTest.java index 63cc2b7..dd496a8 100644 --- a/mods/common/src/test/java/LifecycleTest.java +++ b/mods/common/src/test/java/generic/LifecycleTest.java @@ -1,8 +1,8 @@ /* * Beacon server-side mod source * - * @author : @PS-HEIG - * @created : 03/09/2025 + * @author : @ + * @created : 05/09/2025 * * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov * @@ -25,13 +25,14 @@ * SOFTWARE. */ -import me.peteras17.beacon.BeaconCommon; +package generic;import me.peteras17.beacon.BeaconCommon; import me.peteras17.beacon.BeaconStatus; import me.peteras17.beacon.CommandManager; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import utils.Constants; import java.net.HttpURLConnection; import java.net.URI; diff --git a/mods/common/src/test/java/UrlTest.java b/mods/common/src/test/java/generic/UrlTest.java similarity index 98% rename from mods/common/src/test/java/UrlTest.java rename to mods/common/src/test/java/generic/UrlTest.java index 4b445bd..de60ca0 100644 --- a/mods/common/src/test/java/UrlTest.java +++ b/mods/common/src/test/java/generic/UrlTest.java @@ -1,8 +1,8 @@ /* * Beacon server-side mod source * - * @author : @PS-HEIG - * @created : 03/09/2025 + * @author : @ + * @created : 05/09/2025 * * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov * @@ -25,7 +25,7 @@ * SOFTWARE. */ -import com.fasterxml.jackson.databind.ObjectMapper; +package generic;import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import io.javalin.http.HttpStatus; import me.peteras17.beacon.BeaconCommon; @@ -39,6 +39,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import utils.Constants; import java.io.BufferedReader; import java.io.InputStream; diff --git a/mods/common/src/test/java/WebSocketTest.java b/mods/common/src/test/java/me/peteras17/beacon/SocketManagerTest.java similarity index 62% rename from mods/common/src/test/java/WebSocketTest.java rename to mods/common/src/test/java/me/peteras17/beacon/SocketManagerTest.java index d2d3975..235a33c 100644 --- a/mods/common/src/test/java/WebSocketTest.java +++ b/mods/common/src/test/java/me/peteras17/beacon/SocketManagerTest.java @@ -1,8 +1,8 @@ /* * Beacon server-side mod source * - * @author : @PS-HEIG - * @created : 03/09/2025 + * @author : @ + * @created : 05/09/2025 * * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov * @@ -25,26 +25,40 @@ * SOFTWARE. */ -import me.peteras17.beacon.BeaconCommon; -import me.peteras17.beacon.BeaconStatus; +package me.peteras17.beacon; + import me.peteras17.beacon.cap.*; import me.peteras17.beacon.socket.IOperation; import me.peteras17.beacon.socket.Opcode; +import me.peteras17.beacon.socket.SocketState; import me.peteras17.beacon.socket.ops.*; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.platform.commons.logging.Logger; +import org.junit.platform.commons.logging.LoggerFactory; +import utils.Constants; +import utils.SocketClient; import javax.websocket.*; import java.io.IOException; +import java.lang.reflect.Field; +import java.net.URISyntaxException; import java.util.AbstractMap; import java.util.Map; +import java.util.Random; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -public class WebSocketTest { +public class SocketManagerTest { + + private static final Logger LOGGER = LoggerFactory.getLogger(SocketManagerTest.class); private static final ICapability featureCap = new FeatCapability(); private static final CryptoCapability cryptoCap = new CryptoCapability(); @@ -59,6 +73,7 @@ public class WebSocketTest { * Array of operations needed for a handshake to be concluded correctly * To be configured inside the test */ + @SuppressWarnings("unchecked") private final Map.Entry[] DATA_VALID_HANDSHAKE = new Map.Entry[]{ new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), new AbstractMap.SimpleEntry<>(new Sel(), Opcode.ACK), @@ -71,6 +86,7 @@ public class WebSocketTest { * Array of operations needed for a handshake to be concluded with a retry * To be configured inside the test */ + @SuppressWarnings("unchecked") private final Map.Entry[] DATA_RETRIED_HANDSHAKE = new Map.Entry[]{ new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), new AbstractMap.SimpleEntry<>(new Sel(), Opcode.RTY), @@ -85,6 +101,7 @@ public class WebSocketTest { * Array of operations needed for a handshake to fail (after a retry) * To be configured inside the test */ + @SuppressWarnings("unchecked") private final Map.Entry[] DATA_FAILED_HANDSHAKE = new Map.Entry[]{ new AbstractMap.SimpleEntry<>(new Cry(), Opcode.CRY), new AbstractMap.SimpleEntry<>(new Sel(), Opcode.RTY), @@ -93,16 +110,22 @@ public class WebSocketTest { }; private static final BeaconCommon commonLib = new BeaconCommon(); + private static SocketManager libSocketManager; @BeforeAll - public static void suiteSetup() { + public static void suiteSetup() throws NoSuchFieldException, IllegalAccessException { // Instantiate library, and start it Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconPreHeat((mgr) -> {})); Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStart("")); featureCap.enable(Capability.DEFAULT_FEATURES); cryptoCap.enable(Capability.DEFAULT_CRYPTO_ALGOS); + + // Use reflection to retrieve socket manager instance + Field socketManagerField = commonLib.getClass().getDeclaredField("_socketMgr"); + socketManagerField.setAccessible(true); + libSocketManager = (SocketManager) socketManagerField.get(commonLib); } @AfterAll @@ -111,6 +134,10 @@ public class WebSocketTest { Assertions.assertEquals(BeaconStatus.OK, commonLib.beaconStop()); } + /** + * Test a nominal CryptoGen.LEGACY type of connection + * @implNote If any of the assertions inside the socket client's thread fail, test will run indefinitely (limitation) + */ @Test public void testNominalLegacyConnection() { @@ -127,6 +154,9 @@ public class WebSocketTest { AtomicInteger opIndex = new AtomicInteger(); AtomicReference code = new AtomicReference<>(); + + // Check socket status + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); Assertions.assertDoesNotThrow(() -> { SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { @@ -139,6 +169,7 @@ public class WebSocketTest { if(opIndex.incrementAndGet() >= DATA_VALID_HANDSHAKE.length) { + Assertions.assertEquals(SocketState.OPEN, libSocketManager.getState()); c.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Test done")); return; } @@ -152,16 +183,21 @@ public class WebSocketTest { } catch (IOException ignored1) {} } }); + Assertions.assertEquals(SocketState.WAIT_WEB_CRY, libSocketManager.getState()); client.sendMessage(DATA_VALID_HANDSHAKE[opIndex.get()].getKey().serialize()); client.waitClose(); }); Assertions.assertEquals(CloseReason.CloseCodes.NORMAL_CLOSURE, code.get()); + Assertions.assertNotEquals(SocketState.CLOSED, libSocketManager.getState()); } + /** + * Test a nominal CryptoGen.LEGACY handshake, where first handshake attempt intentionally fails + * @implNote If any of the assertions inside the socket client's thread fail, test will run indefinitely (limitation) + */ @Test - public void testRetriedLegacyConnection() - { + public void testRetriedLegacyConnection() throws InterruptedException { // Set legacy crypto gen - no crypto cryptoCap.setCryptoGen(CryptoGen.LEGACY); @@ -178,6 +214,9 @@ public class WebSocketTest { AtomicInteger opIndex = new AtomicInteger(); AtomicReference code = new AtomicReference<>(); + // Check socket status + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); + Assertions.assertDoesNotThrow(() -> { SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { try { @@ -189,10 +228,16 @@ public class WebSocketTest { if(opIndex.incrementAndGet() >= DATA_RETRIED_HANDSHAKE.length) { + Assertions.assertEquals(SocketState.OPEN, libSocketManager.getState()); c.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Test done")); return; } + // Index 2: retry handshake + if(2 == opIndex.get()) { + Assertions.assertEquals(SocketState.RETRY_WAIT_WEB_CRY, libSocketManager.getState()); + } + // Send next message c.sendMessage(DATA_RETRIED_HANDSHAKE[opIndex.get()].getKey().serialize()); @@ -202,16 +247,24 @@ public class WebSocketTest { } catch (IOException ignored1) {} } }); + Assertions.assertEquals(SocketState.WAIT_WEB_CRY, libSocketManager.getState()); client.sendMessage(DATA_RETRIED_HANDSHAKE[opIndex.get()].getKey().serialize()); client.waitClose(); }); Assertions.assertEquals(CloseReason.CloseCodes.NORMAL_CLOSURE, code.get()); + + // Dirty, yes, but I don't see another way of waiting SocketManager to close the connection before checking the state + Thread.sleep(100); + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); } + /** + * Tests that the socket manager closes the connection after a failed handshake + * @implNote If any of the assertions inside the socket client's thread fail, test will run indefinitely (limitation) + */ @Test - public void testFailedLegacyConnection() - { + public void testFailedLegacyConnection() throws InterruptedException { // Set legacy crypto gen - no crypto cryptoCap.setCryptoGen(CryptoGen.LEGACY); @@ -227,6 +280,9 @@ public class WebSocketTest { AtomicInteger opIndex = new AtomicInteger(); AtomicReference code = new AtomicReference<>(); + // Check socket status + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); + Assertions.assertDoesNotThrow(() -> { SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> {}, (session, reason) -> code.set(reason.getCloseCode()), (c, payload) -> { try { @@ -257,9 +313,16 @@ public class WebSocketTest { // Returned when the handshake fails Assertions.assertEquals(CloseReason.CloseCodes.UNEXPECTED_CONDITION, code.get()); + + // Dirty, yes, but I don't see another way of waiting SocketManager to close the connection before checking the state + Thread.sleep(100); + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); } + /** + * Tests that socket manager closes the connection after an unexpected, initial message + */ @Test public void testSocketConnection() { @@ -275,6 +338,77 @@ public class WebSocketTest { }); Assertions.assertEquals(CloseReason.CloseCodes.PROTOCOL_ERROR, code.get()); + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); + } + } + + /** + * Tests that the socket manager only accepts one connection before the handshake is complete + */ + @Test + public void testMultipleConnectionsPreHandshake() throws DeploymentException, IOException, URISyntaxException, InterruptedException { + int timeoutSecs = 2; + int clientCount = 25; + CountDownLatch clientsClosed = new CountDownLatch(clientCount - 1); + CountDownLatch clientsAccepted = new CountDownLatch(1); + AtomicReference firstClient = new AtomicReference<>(); + AtomicBoolean prematureClose = new AtomicBoolean(false); + + // Check initial state + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); + + Semaphore barrier = new Semaphore(0); + for(int i = 0; i < clientCount; i++) { + final int clientNum = i; + SocketClient client = new SocketClient(Constants.SOCKET_URL, session -> { + LOGGER.info(() -> "Client " + clientNum + " connected with session " + session.getId()); + + new Thread(() -> { + try { + // Simulate random order of connection + Thread.sleep(new Random().nextInt(1000)); + + // First accepted connection. Set atomic to true, and wait for all other clients to disconnect + if(session.isOpen()) + { + LOGGER.info(() -> "Client " + clientNum + " was accepted"); + Assertions.assertEquals(SocketState.WAIT_WEB_CRY, libSocketManager.getState()); + clientsAccepted.countDown(); + firstClient.set(session); + } + else + { + LOGGER.info(() -> "Client " + clientNum + " was rejected"); + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }).start(); + }, (session, reason) -> clientsClosed.countDown(), + (ignoredC, ignoredS) -> { + }, + false); + + // Start only after barrier is lifted + client.start(barrier); } + + // Lift barrier + LOGGER.info(() -> "Lifting barrier"); + Thread.currentThread().setPriority(Thread.MIN_PRIORITY); + barrier.release(clientCount); + clientsAccepted.await(); + + // Wait for all clients, except one, to have their sessions closed + LOGGER.info(() -> "Waiting for other clients to disconnect"); + Assertions.assertTrue(clientsClosed.await(timeoutSecs, TimeUnit.SECONDS)); + Assertions.assertFalse(prematureClose.get()); + + // Check final state + firstClient.get().close(new CloseReason(CloseReason.CloseCodes.GOING_AWAY, "Bye, Felicia")); + + // Dirty, yes, but I don't see another way of waiting SocketManager to close the connection before checking the state + Thread.sleep(100); + Assertions.assertEquals(SocketState.CLOSED, libSocketManager.getState()); } } diff --git a/mods/common/src/test/java/me/peteras17/beacon/cap/CryptoCapabilityTest.java b/mods/common/src/test/java/me/peteras17/beacon/cap/CryptoCapabilityTest.java new file mode 100644 index 0000000..fd7d7c1 --- /dev/null +++ b/mods/common/src/test/java/me/peteras17/beacon/cap/CryptoCapabilityTest.java @@ -0,0 +1,50 @@ +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 05/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +package me.peteras17.beacon.cap; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CryptoCapabilityTest { + + /** + * Test cryptographic generation-related methods + */ + @Test + public void testCryptoGen() + { + CryptoCapability cap = new CryptoCapability(); + + Assertions.assertEquals(CryptoGen.LEGACY, cap.getCryptoGen()); + cap.setCryptoGen(CryptoGen.CURRENT); + Assertions.assertEquals(CryptoGen.CURRENT, cap.getCryptoGen()); + + Assertions.assertEquals(CryptoGen.CURRENT, CryptoGen.of(CryptoGen.CURRENT.ordinal())); + Assertions.assertNull(CryptoGen.of(Integer.MAX_VALUE)); // Unknown value + } +} diff --git a/mods/common/src/test/java/CapabilitiesTest.java b/mods/common/src/test/java/me/peteras17/beacon/cap/FeatCapabilityTest.java similarity index 85% rename from mods/common/src/test/java/CapabilitiesTest.java rename to mods/common/src/test/java/me/peteras17/beacon/cap/FeatCapabilityTest.java index 0a4ae70..01e9ca7 100644 --- a/mods/common/src/test/java/CapabilitiesTest.java +++ b/mods/common/src/test/java/me/peteras17/beacon/cap/FeatCapabilityTest.java @@ -1,11 +1,39 @@ -import me.peteras17.beacon.cap.*; +/* + * Beacon server-side mod source + * + * @author : @PS-HEIG + * @created : 05/09/2025 + * + * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov + * + * 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. + */ + +package me.peteras17.beacon.cap; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.stream.IntStream; -public class CapabilitiesTest { +public class FeatCapabilityTest { /** * Tests setting and unsetting bits @@ -14,7 +42,7 @@ public class CapabilitiesTest { public void testSetUnset() { int[] allBits = IntStream.range(0, FeatCapability.BITMAP_MAX_BITS - 1).toArray(); - ICapability cap = new FeatCapability(); + FeatCapability cap = new FeatCapability(); // Assert all bits at an initial state for(int i : allBits) @@ -43,10 +71,7 @@ public class CapabilitiesTest { } // Check all bits are unset - for(int i : allBits) - { - Assertions.assertFalse(cap.supports(i)); - } + Assertions.assertEquals(0, cap.bitmap.bitCount()); // Check that double-setting does not unset cap.enable(Capability.CRYPTO_EXCH_DH2048); @@ -245,26 +270,10 @@ public class CapabilitiesTest { @Test public void testCopy() { - ICapability cap1 = new FeatCapability(); + FeatCapability cap1 = new FeatCapability(); cap1.enable(Capability.CRYPTO_EXCH_ECDHP256); ICapability cap2 = cap1.copy(); Assertions.assertTrue(cap1.equals(cap2)); } - - /** - * Test cryptographic generation-related methods - */ - @Test - public void testCryptoGen() - { - CryptoCapability cap = new CryptoCapability(); - - Assertions.assertEquals(CryptoGen.LEGACY, cap.getCryptoGen()); - cap.setCryptoGen(CryptoGen.CURRENT); - Assertions.assertEquals(CryptoGen.CURRENT, cap.getCryptoGen()); - - Assertions.assertEquals(CryptoGen.CURRENT, CryptoGen.of(CryptoGen.CURRENT.ordinal())); - Assertions.assertNull(CryptoGen.of(Integer.MAX_VALUE)); // Unknown value - } } diff --git a/mods/common/src/test/java/Constants.java b/mods/common/src/test/java/utils/Constants.java similarity index 70% rename from mods/common/src/test/java/Constants.java rename to mods/common/src/test/java/utils/Constants.java index 7abdddd..c29b627 100644 --- a/mods/common/src/test/java/Constants.java +++ b/mods/common/src/test/java/utils/Constants.java @@ -1,8 +1,8 @@ /* * Beacon server-side mod source * - * @author : @PS-HEIG - * @created : 03/09/2025 + * @author : @ + * @created : 05/09/2025 * * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov * @@ -25,11 +25,13 @@ * SOFTWARE. */ +package utils; + public class Constants { - static final int JAVALIN_PORT = 25566; - static final String JAVALIN_IP = "127.0.0.1"; - static final String JAVALIN_URL = "http://" + JAVALIN_IP + ":" + JAVALIN_PORT; - static final String HEARTBEAT_URL = JAVALIN_URL + "/heartbeat"; - static final String PUBLIC_URL = JAVALIN_URL + "/public"; - static final String SOCKET_URL = "ws://" + JAVALIN_IP + ":" + JAVALIN_PORT + "/socket"; + public static final int JAVALIN_PORT = 25566; + public static final String JAVALIN_IP = "127.0.0.1"; + public static final String JAVALIN_URL = "http://" + JAVALIN_IP + ":" + JAVALIN_PORT; + public static final String HEARTBEAT_URL = JAVALIN_URL + "/heartbeat"; + public static final String PUBLIC_URL = JAVALIN_URL + "/public"; + public static final String SOCKET_URL = "ws://" + JAVALIN_IP + ":" + JAVALIN_PORT + "/socket"; } diff --git a/mods/common/src/test/java/SocketClient.java b/mods/common/src/test/java/utils/SocketClient.java similarity index 68% rename from mods/common/src/test/java/SocketClient.java rename to mods/common/src/test/java/utils/SocketClient.java index 7aca6b6..449c873 100644 --- a/mods/common/src/test/java/SocketClient.java +++ b/mods/common/src/test/java/utils/SocketClient.java @@ -1,8 +1,8 @@ /* * Beacon server-side mod source * - * @author : @PS-HEIG - * @created : 03/09/2025 + * @author : @ + * @created : 05/09/2025 * * Copyright (c) 2025 Pedro Alves da Silva, Nicolas Junod, Léo Rinsoz, Ilian Topalov * @@ -25,6 +25,8 @@ * SOFTWARE. */ +package utils; + import javax.websocket.*; import java.io.IOException; import java.net.URI; @@ -41,16 +43,39 @@ public class SocketClient { private final Consumer _onOpen; private final BiConsumer _onClose; private final BiConsumer _onMessage; + private final String _url; private final CountDownLatch countDownLatch; - SocketClient(String url, Consumer onOpen, BiConsumer onClose, BiConsumer onMessage) throws DeploymentException, IOException, URISyntaxException { + public SocketClient(String url, Consumer onOpen, BiConsumer onClose, BiConsumer onMessage, boolean autoStart) throws URISyntaxException, DeploymentException, IOException { _onOpen = onOpen; _onClose = onClose; _onMessage = onMessage; + _url = url; countDownLatch = new CountDownLatch(1); + if(autoStart) { + start(); + } + } + + public SocketClient(String url, Consumer onOpen, BiConsumer onClose, BiConsumer onMessage) throws URISyntaxException, DeploymentException, IOException { + this(Constants.SOCKET_URL, onOpen, onClose, onMessage, true); + } + + public void start() throws URISyntaxException, DeploymentException, IOException { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); - container.connectToServer(this, new URI(url)); + container.connectToServer(this, new URI(_url)); + } + + public void start(java.util.concurrent.Semaphore semaphore) { + new Thread(() -> { + try { + semaphore.acquire(); + start(); + } catch (InterruptedException | URISyntaxException | DeploymentException | IOException e) { + throw new RuntimeException(e); + } + }).start(); } @OnOpen @@ -82,4 +107,8 @@ public class SocketClient { public void waitClose() throws InterruptedException { countDownLatch.await(); } + + public Session getSession() { + return _session; + } } \ No newline at end of file -- GitLab From a90be19fa40043b1c0585f1e232a20ede250a6c5 Mon Sep 17 00:00:00 2001 From: Pedro Alves da Silva Date: Fri, 5 Sep 2025 12:03:39 +0200 Subject: [PATCH 120/139] (#50) Code cleanup & spotless apply --- .gitlab-ci.yml | 22 -- README.md | 53 ++++- docs/report/quarto.qmd | 46 ++-- mods/README.md | 36 +++ .../me/peteras17/beacon/BeaconCommon.java | 139 ++++++------ .../me/peteras17/beacon/CommandManager.java | 20 +- .../me/peteras17/beacon/MetricManager.java | 46 ++-- .../me/peteras17/beacon/SocketManager.java | 210 ++++++++---------- .../me/peteras17/beacon/cap/Capability.java | 5 +- .../beacon/cap/CryptoCapability.java | 16 +- .../me/peteras17/beacon/cap/CryptoGen.java | 10 +- .../peteras17/beacon/cap/FeatCapability.java | 32 ++- .../me/peteras17/beacon/cap/ICapability.java | 15 +- .../java/me/peteras17/beacon/cmd/Command.java | 50 ++--- .../me/peteras17/beacon/cmd/ExecResult.java | 3 +- .../me/peteras17/beacon/data/ServerType.java | 3 +- .../me/peteras17/beacon/logs/Interceptor.java | 16 +- .../me/peteras17/beacon/metrics/IMetric.java | 7 +- .../beacon/metrics/IMetricProvider.java | 2 + .../beacon/metrics/MetricCollection.java | 18 +- .../peteras17/beacon/metrics/MetricGroup.java | 29 +-- .../peteras17/beacon/metrics/MetricMap.java | 9 +- .../peteras17/beacon/metrics/MetricNode.java | 11 +- .../peteras17/beacon/metrics/MetricType.java | 28 +-- .../beacon/metrics/providers/IO.java | 62 +++--- .../beacon/metrics/providers/JVM.java | 8 +- .../beacon/metrics/providers/Memory.java | 24 +- .../beacon/metrics/providers/Mod.java | 3 +- .../metrics/providers/OperatingSystem.java | 8 +- .../beacon/metrics/providers/Processor.java | 21 +- .../beacon/metrics/providers/Timestamp.java | 3 +- .../peteras17/beacon/socket/IOperation.java | 3 + .../me/peteras17/beacon/socket/Opcode.java | 37 ++- .../peteras17/beacon/socket/SocketState.java | 2 +- .../me/peteras17/beacon/socket/ops/Ack.java | 13 +- .../me/peteras17/beacon/socket/ops/Cap.java | 7 +- .../beacon/socket/ops/CapabilityOp.java | 13 +- .../me/peteras17/beacon/socket/ops/Cry.java | 5 +- .../me/peteras17/beacon/socket/ops/Inf.java | 5 +- .../me/peteras17/beacon/socket/ops/Key.java | 3 +- .../me/peteras17/beacon/socket/ops/Log.java | 7 +- .../peteras17/beacon/socket/ops/ModMtr.java | 7 +- .../me/peteras17/beacon/socket/ops/Nok.java | 7 +- .../me/peteras17/beacon/socket/ops/Nop.java | 12 +- .../me/peteras17/beacon/socket/ops/Rty.java | 12 +- .../me/peteras17/beacon/socket/ops/Sel.java | 3 +- .../peteras17/beacon/socket/ops/WebMtr.java | 11 +- .../peteras17/beacon/fabric/BeaconServer.java | 12 +- .../beacon/fabric/metrics/Players.java | 23 +- .../beacon/fabric/metrics/Properties.java | 14 +- .../beacon/fabric/metrics/Server.java | 8 +- .../beacon/fabric/metrics/Worlds.java | 39 ++-- scripts/versioner.py | 4 +- 53 files changed, 641 insertions(+), 561 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f9db4a5..4e02104 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -113,28 +113,6 @@ stages: junit: "${CI_PROJECT_DIR}/mods/common/build/test-results/test/TEST-*.xml" -"Test mod: Fabric": - stage: test - image: gradle:jdk21-alpine - tags: - - docker - dependencies: - - "Build mod: Fabric" - needs: - - job: "Build mod: Fabric" - script: - - cd ${CI_PROJECT_DIR}/mods/fabric - - ./gradlew test jacocoTestReport - - cat ${CI_PROJECT_DIR}/mods/fabric/build/reports/jacoco/test/html/index.html - coverage: /Total.*?([0-9]{1,3})%/ - artifacts: - reports: - coverage_report: - coverage_format: jacoco - path: ${CI_PROJECT_DIR}/mods/fabric/build/reports/jacoco/test/jacocoTestReport.xml - junit: "${CI_PROJECT_DIR}/mods/fabric/build/test-results/test/TEST-*.xml" - - "Upload: Mods": stage: deploy image: alpine/curl:latest diff --git a/README.md b/README.md index 6ea3b11..59f8ed5 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,22 @@ ![](mods/fabric/src/main/resources/beacon.png) +
            + +![](https://git-ext.iict-heig-vd.ch/PS-HEIG/beacon/badges/dev/pipeline.svg) +![](https://git-ext.iict-heig-vd.ch/PS-HEIG/beacon/badges/dev/coverage.svg) +![](https://badgen.net/badge/version/0.1/blue) +![](https://badgen.net/docker/pulls/pas17/beacon) +
            # Beacon -Fabric server performance and health monitoring made simple. Repository for the PDG project, HEIG-VD 2024-2025. +Minecraft server performance and health monitoring made simple. Repository for the PDG project, HEIG-VD 2024-2025. ## Project summary -Beacon is a suite of tools allowing Minecraft server owners or operators to monitor and interact with their server from a web interface, making it easier to troubleshoot performance issue causes and manage the server from another device. Hardware usage and limits are monitored to the extent of the JDK's limits and are combined with the server metrics and logs in order to create a pack of information that's useful to readily understand the server's current state. It includes code to build a Minecraft server-side mod for FabricMC, but it also allows developers to build it for other server types. The web server displays the server information, and allows the user to remotely interact with the server. Mod code has been written with JDK 21, while the web server uses Python 3.11 and Flask. Project was made as part of the PDG course in [HEIG-VD](https://heig-vd.ch/). +Beacon is a suite of tools allowing Minecraft server owners or operators to monitor and interact with their server from a web interface, making it easier to troubleshoot performance issue causes and manage the server from another device. Hardware usage and limits are monitored to the extent of the JDK's limits and are combined with the server metrics and logs in order to create a pack of information that's useful to readily understand the server's current state. It currently includes code to build a Minecraft server-side mod for FabricMC, but it also allows developers to build it for other server types. The web server displays the server information, and allows the user to remotely interact with the server. Mod code has been written with JDK 21, while the web server uses Python 3.11 and Flask. Project was made as part of the PDG course in [HEIG-VD](https://heig-vd.ch/). ## Used technologies @@ -53,12 +60,46 @@ The Gitlab pipeline contains following stages: - **Versioning**: calculates the version of the JAR files to be built - **Build**: used to build the JAR files for all supported Minecraft server types individually - **Test**: tests the common and server-specific codes. Test execution generates code coverage information -- **Imaging**: builds the Docker container image for the Beacon web server +- **Imaging**: builds and publishes the Docker container image for the Beacon web server - **Deploy**: deploys the landing page online, uploads built JAR files to the package registry. Tags commit and uploads source files with the calculated version into the repository To avoid having the CI/CD run in circles, the pipeline is only run if the commit is not tagged, as that is done automatically upon pushing to or merging into the main branch -## Docker Compose + +## Using our project + +### Mod + +Because our JAR files are published everytime a new release happens, you can head on to the [releases page](https://git-ext.iict-heig-vd.ch/PS-HEIG/beacon/-/releases) and download the latest JAR for the Minecraft server type of your choice. + +#### Installing the mod on FabricMC + +First of all, [download and install FabricMC](https://fabricmc.net/use/installer/) on your computer. After the server files have been downloaded and extracted into the folder of your choice, create a folder named `mods` inside the server folder, and put the following files inside it: + +- The [Fabric API JAR file](https://www.curseforge.com/minecraft/mc-mods/fabric-api) (required to run mods in FabricMC servers) +- The mod's [released JAR file](https://git-ext.iict-heig-vd.ch/PS-HEIG/beacon/-/releases) + +### Deploying the web server + +#### Manually + +If you wish to deploy the web server manually, you'll need Python installed (developed and tested with Python 3.10). After you've installed it, you can run the following commands to get the web server running: + +```sh +cd web/ +python -m venv .venv +pip install -r requirements.txt +flask run +``` + +#### Docker + +You can easily deploy our [ready-to-use Docker image](https://hub.docker.com/repository/docker/pas17/beacon/general) on a machine that has Docker installed. The web server runs on port 5000. The commands to deploy it are as follow: + +```sh +docker pull pas17/beacon:latest +docker run -d -p 5000:5000 pas17/beacon:latest +``` ## Contributing @@ -92,6 +133,10 @@ If you want to contribute, here's how to do it: 4. After your development, create a merge request from your branch to the corresponding component branch. A developer or maintainer will have a look at it, and either merge it, reject it (if this happens, don't worry, they'll give you a reason), or ask for changes 5. When a new version is ready to be released, merge requests will be open between each of the modified components and the development branch. A maintainer will review it, and follow the same procedure as listed in the step above. If everything is correct, the mod version is increased automatically when the merge request between the development and the root branches is merged. +### Contributing to the mod + +Check our [mod folder's README.md](./mods) for more information on this subject. + ## License This work is protected under the MIT License. Check the `LICENSE.txt` file for the full copyright. diff --git a/docs/report/quarto.qmd b/docs/report/quarto.qmd index ce50748..79c4e7a 100644 --- a/docs/report/quarto.qmd +++ b/docs/report/quarto.qmd @@ -303,9 +303,16 @@ package me.peteras17.beacon; /** * Common library main class */ -@SuppressWarnings("unused") public final class BeaconCommon { + /** + * Compiled mod's version + */ + public static String VERSION = me.peteras17.beacon.ModVersion.VERSION; + + /** + * Default constructor + */ public BeaconCommon(); /** @@ -317,35 +324,36 @@ public final class BeaconCommon { public CommandManager getCmdManager(); /** - * Retrieves the root metric node - * @apiNote Call may be done before call to .beaconStart() - * @return Root node + * Returns the metrics manager instance + * @apiNote Registration of providers after call to .beaconStart() has no effect until call to .beaconStop() is made + * @return Metric manager instance */ - public MetricGroup getRootMetric(); - + public MetricManager getMetricManager(); /** - * Informs the common lib. that the server is up, and the mod has been loaded - * @param cfgPath Full path to the mod's configuration path + * Prepares Beacon's common library for a call to .beaconStart() * @param cmdRegisterCb Callback function receiving the command manager instance - * @throws RuntimeException Thrown if common code has already been started - * @return BeaconStatus.OK on success, or BeaconStatus.ERROR if an error occurred + * @return OK on success; + * TOO_HOT if this function has already been called */ - public int beaconStart(String cfgPath, Consumer cmdRegisterCb, Runnable beaconCmdCb) throws RuntimeException; + public BeaconStatus beaconPreHeat(Consumer cmdRegisterCb); /** - * Informs the common lib. that the server is about to stop - * @throws RuntimeException Thrown if common code has already been stopped + * Informs the common lib. that the server is up, and the mod has been loaded + * @param cfgPath Full path to the mod's configuration path + * @return OK if started; + * ALREADY_STARTED if .beaconStop() hasn't been called; + * TOO_COLD if call to .beaconPreHeat() is missing */ - public void beaconStop() throws RuntimeException; + public BeaconStatus beaconStart(String cfgPath, Function cmdExecutor); /** - * Executes a command entered by an operator - * @param command Command requested - * @param args List of command arguments - * @return BeaconStatus.OK on success, or any other value in case an error occurred (depending on the error) + * Informs the common lib. that the server is about to stop + * @apiNote Metrics need to be re-registered before calling .beaconStart() again + * @return OK if stopped; + * NOT_STARTED is a call to .beaconStart() has not been done yet */ - public BeaconStatus beaconExec(String command, Object[] args); + public BeaconStatus beaconStop(); } ``` diff --git a/mods/README.md b/mods/README.md index d0ef46d..dec4b5e 100644 --- a/mods/README.md +++ b/mods/README.md @@ -78,3 +78,39 @@ Include the following header in every new file: */ ``` +## Contributing to the mod + +If you want to add a new feature, you need to: + +- Open an issue describing the metric you want to add, and why it should be added +- Create a branch from `mods` from your issue page, and start adding your metric + - Add the metric to the common library's `me.peteras17.beacon.cap.Capability` enumeration, under the correct category (check the comments) + - If the metric should be enabled by the default in the next version, add it to the `me.peteras17.beacon.cap.Capability.DEFAULT_FEATURES` array + - Make sure your metric's bit index does not overlap with already-existing metrics within the same category +- Fix any tests you might've broken +- Wait for a reviewer to stop by and approve, reject, or request changes! + +And then, depending on whether the feature involves adding a new metric or a command, check the correct section below. + +### Adding a new metric + +If you want to add a new metric that can be sent by the mod to the web server, you need to: + +- Follow the steps listed above, and then +- Make sure it can be retrieved in all the Minecraft server types we support +- On the server-side mod code, create a class the implements the interface `IMetricProvider`. You can take inspiration from already existing providers! 😊 +- Instantiate that metric provider class in the appropriate place +- Add the metric to the [metrics document](../docs/report/), and update the metrics tree file + +### Adding a new opcode + +If you want to add a new opcode that can be used in the communication between the mod and the web server, you need to: + +- Follow the steps listed above, and then +- Create a new opcode entry in the `me.peteras17.beacon.socket.Opcode` enumeration, under the correct category (check the comments) +- In the common library, create a new class that implements the interface `me.peteras17.beacon.socket.IOperation` + - If your opcode includes text in its payload, make your class extend `me.peteras17.beacon.socket.JsonOp` +- If your opcode will be received by the mod via the web socket, do the following: + - Add your opcode to the `me.peteras17.beacon.SocketManager.OPCODE_TO_CLASS_MAP` map, so the mod's socket manager will detect it, and accept it + - Depending on what socket state should accept the opcode, you'll need to find the function that handles that state and edit it. For example, if the opcode is received only after the handshake phase, you'll need to add a case to the switch case in `.openState()` method inside the socket manager's class +- If your opcode will be sent by the mod via the web socket, find the appropriate state method in the `me.peteras17.beacon.SocketManager` class, and send the command from there diff --git a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java index d68c61a..6c50032 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java +++ b/mods/common/src/main/java/me/peteras17/beacon/BeaconCommon.java @@ -30,16 +30,11 @@ package me.peteras17.beacon; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import io.javalin.Javalin; import io.javalin.http.HttpStatus; import me.peteras17.beacon.cap.*; import me.peteras17.beacon.cmd.ExecResult; import me.peteras17.beacon.logs.Interceptor; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; -import java.util.function.Consumer; -import io.javalin.Javalin; import me.peteras17.beacon.metrics.IMetric; import me.peteras17.beacon.metrics.MetricGroup; import me.peteras17.beacon.metrics.MetricType; @@ -48,6 +43,11 @@ import me.peteras17.beacon.metrics.providers.Mod; import me.peteras17.beacon.metrics.providers.Timestamp; import org.apache.logging.log4j.Level; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.util.function.Consumer; + /** * Common library main class */ @@ -87,18 +87,17 @@ public final class BeaconCommon { private boolean _started = false; /** - * Deleted default constructor + * Default constructor */ - public BeaconCommon() - { + public BeaconCommon() { // Setup capabilities _features = new FeatCapability(); _features.enable(Capability.DEFAULT_FEATURES); - + CryptoCapability cryptoAlgos = new CryptoCapability(); cryptoAlgos.setCryptoGen(CryptoGen.CURRENT); cryptoAlgos.enable(Capability.DEFAULT_CRYPTO_ALGOS); - + // Create managers _cmdMgr = new CommandManager(this); _metricMgr = new MetricManager(new MetricGroup(MetricType.ROOT, Capability.ALWAYS_ACTIVE)); @@ -112,47 +111,47 @@ public final class BeaconCommon { /** * Executes the command that retrieves the common library's status + * * @param context Command context. Unused * @return Execution result */ - ExecResult runStatusCommand(Object context) - { + ExecResult runStatusCommand(Object context) { return new ExecResult(BeaconStatus.OK, "It's working"); } /** * Retrieves the common library's command manager + * + * @return Command manager instance * @apiNote Call may be done before call to .beaconStart() * @apiNote Appending commands after call to .beaconStart() have no effect until server is restarted - * @return Command manager instance */ - public CommandManager getCmdManager() - { + public CommandManager getCmdManager() { return _cmdMgr; } /** * Returns the metrics manager instance - * @apiNote Registration of providers after call to .beaconStart() has no effect until call to .beaconStop() is made + * * @return Metric manager instance + * @apiNote Registration of providers after call to .beaconStart() has no effect until call to .beaconStop() is made */ - public MetricManager getMetricManager() - { + public MetricManager getMetricManager() { return _metricMgr; } /** * Prepares Beacon's common library for a call to .beaconStart() + * * @param cmdRegisterCb Callback function receiving the command manager instance * @return OK on success; - * TOO_HOT if this function has already been called + * TOO_HOT if this function has already been called */ - public BeaconStatus beaconPreHeat(Consumer cmdRegisterCb) - { - if(_heatedUp) { + public BeaconStatus beaconPreHeat(Consumer cmdRegisterCb) { + if (_heatedUp) { return BeaconStatus.TOO_HOT; } - + cmdRegisterCb.accept(_cmdMgr); _heatedUp = true; return BeaconStatus.OK; @@ -160,23 +159,24 @@ public final class BeaconCommon { /** * Informs the common lib. that the server is up, and the mod has been loaded + * * @param cfgPath Full path to the mod's configuration path * @return OK if started; - * ALREADY_STARTED if .beaconStop() hasn't been called; - * TOO_COLD if call to .beaconPreHeat() is missing + * ALREADY_STARTED if .beaconStop() hasn't been called; + * TOO_COLD if call to .beaconPreHeat() is missing */ public BeaconStatus beaconStart(String cfgPath) { - + // Call to .beaconPreHeat() missing - if(!_heatedUp) { + if (!_heatedUp) { return BeaconStatus.TOO_COLD; } - + // Repeated call to .beaconStart() before .beaconStop() - if(_started) { + if (_started) { return BeaconStatus.ALREADY_STARTED; } - + _started = true; // Create instances @@ -184,40 +184,41 @@ public final class BeaconCommon { // Create HTTP endpoints _javalin = Javalin.create() - .get("/heartbeat", ctx -> ctx.status(HttpStatus.OK)) - .get("/public", ctx -> { - byte[] publicMetrics = getPublicInfo(); - byte[] payload = new byte[(Integer.SIZE / 8) + publicMetrics.length]; - byte[] lengthBytes = ByteBuffer.allocate(Integer.SIZE / 8) - .order(ByteOrder.BIG_ENDIAN) - .putInt(publicMetrics.length) - .array(); - - System.arraycopy(lengthBytes, 0, payload, 0, lengthBytes.length); - System.arraycopy(publicMetrics, 0, payload, lengthBytes.length, publicMetrics.length); - - ctx.result(payload); - }) - .ws("/socket", wsConfig -> { - wsConfig.onBinaryMessage(_socketMgr::onSocketMessage); - wsConfig.onConnect(_socketMgr::onSocketConnect); - wsConfig.onClose(_socketMgr::onSocketClose); - }) - .start(25566); - + .get("/heartbeat", ctx -> ctx.status(HttpStatus.OK)) + .get("/public", ctx -> { + byte[] publicMetrics = getPublicInfo(); + byte[] payload = new byte[(Integer.SIZE / 8) + publicMetrics.length]; + byte[] lengthBytes = ByteBuffer.allocate(Integer.SIZE / 8) + .order(ByteOrder.BIG_ENDIAN) + .putInt(publicMetrics.length) + .array(); + + System.arraycopy(lengthBytes, 0, payload, 0, lengthBytes.length); + System.arraycopy(publicMetrics, 0, payload, lengthBytes.length, publicMetrics.length); + + ctx.result(payload); + }) + .ws("/socket", wsConfig -> { + wsConfig.onBinaryMessage(_socketMgr::onSocketMessage); + wsConfig.onConnect(_socketMgr::onSocketConnect); + wsConfig.onClose(_socketMgr::onSocketClose); + }) + .start(25566); + _metricMgr.registerMetrics(); return BeaconStatus.OK; } /** * Informs the common lib. that the server is about to stop - * @apiNote Metrics need to be re-registered before calling .beaconStart() again + * * @return OK if stopped; - * NOT_STARTED is a call to .beaconStart() has not been done yet + * NOT_STARTED is a call to .beaconStart() has not been done yet + * @apiNote Metrics need to be re-registered before calling .beaconStart() again */ public BeaconStatus beaconStop() { - if(!_started) { + if (!_started) { return BeaconStatus.NOT_STARTED; } @@ -228,41 +229,25 @@ public final class BeaconCommon { return BeaconStatus.OK; } - /** - * Executes a command entered by an operator - * @param command Command requested - * @param args List of command arguments - * @return OK on success; - * NOT_STARTED if a call to .beaconStart() is missing - */ - public BeaconStatus beaconExec(String command, Object[] args) { - - if(!_started) { - return BeaconStatus.NOT_STARTED; - } - - return BeaconStatus.OK; - } - /** * Retrieves the public information metrics, and serializes them + * * @return Byte array containing the metrics' JSON */ - private byte[] getPublicInfo() - { + private byte[] getPublicInfo() { ObjectMapper mapper = new ObjectMapper(); ObjectNode rootNode = mapper.createObjectNode(); - + try { IMetric publicMetric = _metricMgr.getMetric(MetricType.PROPERTIES); - if(null == publicMetric) { + if (null == publicMetric) { throw new IllegalStateException(); } publicMetric.serialize(rootNode, _features); return mapper.writeValueAsString(rootNode).getBytes(StandardCharsets.UTF_8); - } catch(JsonProcessingException | IllegalStateException ignored) { - return new byte[] { '{', '}' }; + } catch (JsonProcessingException | IllegalStateException ignored) { + return new byte[]{'{', '}'}; } } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java b/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java index b439249..0e38ad0 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/CommandManager.java @@ -48,6 +48,7 @@ public class CommandManager { /** * Creates a new command manager instance + * * @param commonInstance Common library instance */ CommandManager(BeaconCommon commonInstance) { @@ -56,28 +57,29 @@ public class CommandManager { /** * Gets a command handler, based on a provided parent command - * @param fullCommand Full executed command string that serves as arguments or subcommands + * + * @param fullCommand Full executed command string that serves as arguments or subcommands * @param parentCommand Parent command to use * @return Command if handler found, null if no handler was found */ private Command getHandler(String fullCommand, Command parentCommand) { String[] parts = fullCommand.split(" "); - + // Use root command if needed - if(parentCommand == null) { + if (parentCommand == null) { parentCommand = rootCommand; } - + // Command name not in full command (weird?), or executed command mustn't be executed by Beacon - if(parts.length == 0 || !parentCommand.getName().equals(parts[0])) { + if (parts.length == 0 || !parentCommand.getName().equals(parts[0])) { return null; } - + // Command takes arguments, and we have them, or no subcommand requested - if((parts.length > 1 && parentCommand.takesArgs()) || (parts.length == 1 && !parentCommand.takesArgs())) { + if ((parts.length > 1 && parentCommand.takesArgs()) || (parts.length == 1 && !parentCommand.takesArgs())) { return parentCommand; } - + // Match subcommands recursively return this.getHandler(String.join(" ", Arrays.copyOfRange(parts, 1, parts.length)), parentCommand); } @@ -85,6 +87,7 @@ public class CommandManager { /** * Gets a command handler for the entered command + * * @param fullCommand Full executed command string that serves as arguments or subcommands * @return Command if handler found, null if no handler was found */ @@ -95,6 +98,7 @@ public class CommandManager { /** * Returns the root command's instance + * * @return Instance */ @SuppressWarnings("unused") // Used in server-specific code diff --git a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java index 0143d01..bc75dd4 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/MetricManager.java @@ -36,7 +36,8 @@ import me.peteras17.beacon.metrics.IMetricProvider; import me.peteras17.beacon.metrics.MetricGroup; import me.peteras17.beacon.metrics.MetricType; -import java.util.*; +import java.util.LinkedList; +import java.util.List; public class MetricManager { @@ -59,8 +60,7 @@ public class MetricManager { * Instantiates a new hardware metrics collection thread * Does not automatically start the thread */ - MetricManager(MetricGroup root) - { + MetricManager(MetricGroup root) { _root = root; _providers = new LinkedList<>(); _registered = false; @@ -73,18 +73,15 @@ public class MetricManager { * * @apiNote Thread-safe code */ - void registerMetrics() - { + void registerMetrics() { synchronized (_providers) { // Only allow call once - if(_registered) - { + if (_registered) { throw new IllegalStateException("Providers have already been registered!"); } - for(IMetricProvider provider : _providers) - { + for (IMetricProvider provider : _providers) { provider.register(_root); } @@ -95,27 +92,24 @@ public class MetricManager { /** * Requests all providers to stop */ - void stopProviders() - { + void stopProviders() { synchronized (_providers) { - for(IMetricProvider provider : _providers) - { + for (IMetricProvider provider : _providers) { provider.stop(); } } - + _providers.clear(); } /** * Registers a new metric provider - * @param provider Provider instance * + * @param provider Provider instance * @apiNote Thread-safe code */ - public void register(IMetricProvider provider) - { + public void register(IMetricProvider provider) { synchronized (_providers) { _providers.add(provider); } @@ -124,36 +118,36 @@ public class MetricManager { /** * Returns the metric for the provided metric type + * * @param type Type to find * @return Instance, if found * @throws IllegalArgumentException Thrown if instance is not found */ - public IMetric getMetric(MetricType type) throws IllegalArgumentException - { + public IMetric getMetric(MetricType type) throws IllegalArgumentException { synchronized (_providers) { IMetric metric = _root.findMetric(type); - if(metric != null) { + if (metric != null) { return metric; } } - + throw new IllegalArgumentException("No metric object found for provided type"); } - + /** * Get last metrics values, in a JSON format + * * @return Values */ - public String getLastValues(ICapability capabilityManager) - { + public String getLastValues(ICapability capabilityManager) { ObjectMapper mapper = new ObjectMapper(); - + try { ObjectNode rootNode = mapper.createObjectNode(); _root.serialize(rootNode, capabilityManager); return mapper.writeValueAsString(rootNode); - }catch(JsonProcessingException | IllegalStateException ignored) { + } catch (JsonProcessingException | IllegalStateException ignored) { return null; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java index 70ab83f..5ad6996 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java +++ b/mods/common/src/main/java/me/peteras17/beacon/SocketManager.java @@ -42,23 +42,23 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.InvocationTargetException; -import java.util.function.Function; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.function.Function; /** * Class to manage a WebSocket */ public class SocketManager { - + public static final Logger LOGGER = LoggerFactory.getLogger(SocketManager.class.getName()); /** * Has the crypto capability negotiation (CRY and SEL) been retried? */ private boolean _retriedCryptoNeg; - + /** * Current state of the socket */ @@ -101,6 +101,7 @@ public class SocketManager { /** * Mapping between opcode and operation class + * * @implNote Only contains opcodes that may be received through the socket */ private static final Map> OPCODE_TO_CLASS_MAP = Map.of( @@ -131,6 +132,7 @@ public class SocketManager { /** * Creates a new socket manager instance + * * @param commonLib Beacon's common library instance * @param modCryptoCap Mod's cryptographic algorithm capabilities * @param modFeatCap Mod's feature capabilities @@ -148,6 +150,7 @@ public class SocketManager { /** * Sends a payload through the socket, provided a socket connection is open + * * @param op Operation to send */ public void sendOp(@NotNull IOperation op) { @@ -155,23 +158,23 @@ public class SocketManager { // Critical section synchronized (this) { // Ignore call if socket is not open - if(isFree()) { + if (isFree()) { return; } } - + // Ignore log sending if it's disabled - if(op.getOpcode() == Opcode.LOG) { - + if (op.getOpcode() == Opcode.LOG) { + // Critical section synchronized (this) { - if(isOpen()) { + if (isOpen()) { if (_socketFeatCap.supports(Capability.FEAT_LOGS)) { _socket.send(op.serialize()); } } } - + return; } @@ -180,70 +183,70 @@ public class SocketManager { _socket.send(op.serialize()); } } - - - public void stop() - { + + + public void stop() { // Critical section synchronized (this) { // Force close connection - if(!isFree()) { + if (!isFree()) { _socket.closeSession(); destroySocket(); - } + } } } /** * Returns whether the socket is up & running + * * @return True if it is, false if not ready yet */ - public boolean isOpen() - { + public boolean isOpen() { return _state == SocketState.OPEN; } /** * Returns whether the socket is ready to receive a connection + * * @return True if ready to receive a connection, false if already in use */ - boolean isFree() - { + boolean isFree() { return _state == SocketState.CLOSED; } /** * Handler used to handle messages being received on the socket + * * @param ctx Socket context */ - void onSocketMessage(WsBinaryMessageContext ctx) - { + void onSocketMessage(WsBinaryMessageContext ctx) { Opcode opcode; byte[] payload = ctx.data(); IOperation operation; - + try { // No payload - if(payload.length == 0) { + if (payload.length == 0) { throw new IllegalArgumentException("Payload is empty"); } - + // Unable to find a known opcode opcode = Opcode.fromOp(payload[0]); - if(!OPCODE_TO_CLASS_MAP.containsKey(opcode)) { + if (!OPCODE_TO_CLASS_MAP.containsKey(opcode)) { throw new IllegalArgumentException("Opcode has no handler!"); } - + // Instantiate and build operation from payload Class clazz = OPCODE_TO_CLASS_MAP.get(opcode); operation = clazz.getDeclaredConstructor().newInstance(); operation.buildFrom(payload); - - } catch(IllegalArgumentException e) { + + } catch (IllegalArgumentException e) { LOGGER.warn("Socket message dropped: {}", e.getMessage()); sendOp(new Nok(e.getMessage())); return; - } catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { + } catch (InvocationTargetException | InstantiationException | IllegalAccessException | + NoSuchMethodException e) { LOGGER.warn("Failed to create operation object from payload: {}", e.getMessage()); sendOp(new Nok(e.getMessage())); return; @@ -253,7 +256,7 @@ public class SocketManager { synchronized (this) { // Advance state machine, and send payload through web socket IOperation outOp = advanceState(operation); - if(outOp != null) { + if (outOp != null) { sendOp(outOp); LOGGER.debug("Responded to opcode {} with opcode {}", operation.getOpcode(), outOp.getOpcode()); } @@ -262,15 +265,15 @@ public class SocketManager { /** * Handler used to handle socket connection + * * @param ctx Socket context */ - void onSocketConnect(WsConnectContext ctx) - { + void onSocketConnect(WsConnectContext ctx) { // Critical section synchronized (this) { - + LOGGER.info("WebSocket connection from {}", ctx.session.getRemoteAddress()); - + // Ignore if socket's already in use if (!isFree()) { LOGGER.warn("Another client, {}, tried to connect to socket when it's already in use", ctx.session.getRemoteAddress()); @@ -282,7 +285,7 @@ public class SocketManager { // Set socket as used _state = SocketState.WAIT_WEB_CRY; _socket = ctx; - _socketCryptoCap = (CryptoCapability)_modCryptoCap.copy(); + _socketCryptoCap = (CryptoCapability) _modCryptoCap.copy(); _socketFeatCap = _modFeatCap.copy(); _retriedCryptoNeg = false; _socket.enableAutomaticPings(); @@ -292,13 +295,13 @@ public class SocketManager { /** * Handler used to handle socket closing + * * @param ctx Socket context */ - void onSocketClose(WsCloseContext ctx) - { + void onSocketClose(WsCloseContext ctx) { // Critical section synchronized (this) { - + // Reset socket state only if in use, and if closing was not provoked by Beacon if (isFree()) { return; @@ -314,10 +317,10 @@ public class SocketManager { /** * Makes sure the socket is destroyed + * * @implNote Call must be done from a critical section */ - private void destroySocket() - { + private void destroySocket() { _state = SocketState.CLOSED; _socket = null; _socketCryptoCap = null; @@ -326,56 +329,49 @@ public class SocketManager { /** * Advances the state machine + * * @param input Input operation * @return New operation instance, or null if no need to send data * @implNote Call must be done from a critical section */ - private IOperation advanceState(IOperation input) - { + private IOperation advanceState(IOperation input) { IOperation op = null; - + // I mean, it's in the name of the operation... - if(input instanceof Nop) { + if (input instanceof Nop) { return null; } - + // Check whether the current socket state can be handled. If it's not the case, we're... kind of in a pickle - if(!STATE_TO_CALLBACK_MAP.containsKey(_state)) - { + if (!STATE_TO_CALLBACK_MAP.containsKey(_state)) { LOGGER.error("Unknown state to handle: {}", this._state); - if(_socket != null) { + if (_socket != null) { _socket.session.close(CloseStatus.SERVER_ERROR, "Unknown state"); } - } - else - { - try - { + } else { + try { op = STATE_TO_CALLBACK_MAP.get(_state).apply(input); - } - catch(RuntimeException e) - { + } catch (RuntimeException e) { LOGGER.error("Failed to advance state machine: {}", e.getMessage()); - if(_socket != null) { + if (_socket != null) { _socket.session.close(CloseStatus.SERVER_ERROR, "State machine internal error"); } } } - + return op; } /** * Handles the SocketState.WAIT_WEB_CRY state + * * @param input Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type */ - private IOperation waitWebCryState(IOperation input) throws RuntimeException - { + private IOperation waitWebCryState(IOperation input) throws RuntimeException { // Cast into right type - if(!(input instanceof Cry cry)) - { + if (!(input instanceof Cry cry)) { throw new RuntimeException("Wrong input operation type!"); } @@ -391,25 +387,22 @@ public class SocketManager { /** * Handles the SocketState.WAIT_WEB_SEL state + * * @param input Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type, or handshake failed */ - private IOperation waitWebSelState(IOperation input) throws RuntimeException - { + private IOperation waitWebSelState(IOperation input) throws RuntimeException { // Cast into right type - if(!(input instanceof Sel sel)) - { + if (!(input instanceof Sel sel)) { throw new RuntimeException("Wrong input operation type!"); } // Make sure calculated intersection and received intersection are the same, and not all empty. If not, retry (if possible) IOperation retOp; - if(!sel.capability.equals(_socketCryptoCap) - || (sel.capability.equals(new FeatCapability()) && _socketCryptoCap.getCryptoGen() != CryptoGen.LEGACY)) - { - if(_retriedCryptoNeg) - { + if (!sel.capability.equals(_socketCryptoCap) + || (sel.capability.equals(new FeatCapability()) && _socketCryptoCap.getCryptoGen() != CryptoGen.LEGACY)) { + if (_retriedCryptoNeg) { throw new RuntimeException("Cryptographic handshake failed two times in a row!"); } @@ -418,21 +411,16 @@ public class SocketManager { retOp = new Rty(); LOGGER.warn("Cryptographic handshake failed. Retrying"); _state = SocketState.RETRY_WAIT_WEB_CRY; - } - else - { + } else { Capability exchangeCrypto = getSocketExchCrypto(); Capability symmetricCrypto = getSocketSymmCrypto(); - + LOGGER.info("Cryptographic handshake concluded with key exchange {} and symmetric encryption {}", exchangeCrypto, symmetricCrypto); retOp = new Ack(); - if(Capability.NO_CRYPTO != exchangeCrypto) - { + if (Capability.NO_CRYPTO != exchangeCrypto) { _state = SocketState.EXCHANGE_KEYS; - } - else - { + } else { _state = SocketState.WAIT_WEB_CAP; } } @@ -442,29 +430,28 @@ public class SocketManager { /** * Handles the SocketState.EXCHANGE_KEYS state + * * @param ignoredInput Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type, or exchange failed */ - private IOperation exchangeKeysState(IOperation ignoredInput) throws RuntimeException - { + private IOperation exchangeKeysState(IOperation ignoredInput) throws RuntimeException { throw new RuntimeException("Not implemented yet!"); } /** * Handles the SocketState.WAIT_WEB_CAP state + * * @param input Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type, or exchange failed */ - private IOperation waitWebCapState(IOperation input) throws RuntimeException - { + private IOperation waitWebCapState(IOperation input) throws RuntimeException { // Cast into right type - if(!(input instanceof Cap cap)) - { + if (!(input instanceof Cap cap)) { throw new RuntimeException("Wrong input operation type!"); } - + // Intersect capabilities, and send mod's capabilities _socketFeatCap.intersect(cap.capability); Cap modCap = new Cap(_modFeatCap); @@ -474,38 +461,37 @@ public class SocketManager { /** * Handles the SocketState.WAIT_CAP_ACK state + * * @param input Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type, or exchange failed */ - private IOperation waitCapAckState(IOperation input) throws RuntimeException - { + private IOperation waitCapAckState(IOperation input) throws RuntimeException { // Cast into right type - if(!(input instanceof Ack)) - { + if (!(input instanceof Ack)) { throw new RuntimeException("Response was not ACK"); } // Send mod's information, and set socket's state as open Inf modInfo = new Inf(_commonLib, _socketFeatCap); LOGGER.info("Handshake complete! WebSocket open"); - + // Send response before setting state to open to avoid having logs being sent before _socket.send(modInfo.serialize()); _state = SocketState.OPEN; - + return null; } /** * Handles the SocketState.OPEN state + * * @param input Received operation object * @return Next operation object * @throws RuntimeException Thrown if input object is of wrong type, or exchange failed */ - private IOperation openState(IOperation input) throws RuntimeException - { - switch(input.getOpcode()) { + private IOperation openState(IOperation input) throws RuntimeException { + switch (input.getOpcode()) { case MTR -> { return new ModMtr(_commonLib, _socketFeatCap); } @@ -520,30 +506,27 @@ public class SocketManager { /** * Returns the negotiated key exchange algorithm to be used for socket + * * @return Algorithm capability * @throws RuntimeException Thrown if no algorithm is available */ - private Capability getSocketExchCrypto() throws RuntimeException - { + private Capability getSocketExchCrypto() throws RuntimeException { Capability preferred = null; - + // No exchange for legacy crypto - if(_socketCryptoCap.getCryptoGen() == CryptoGen.LEGACY) { + if (_socketCryptoCap.getCryptoGen() == CryptoGen.LEGACY) { return Capability.NO_CRYPTO; } // Stop at first found - for(Capability cap : Capability.CRYPTO_EXCH_PREFERENCES) - { - if(_socketCryptoCap.supports(cap)) - { + for (Capability cap : Capability.CRYPTO_EXCH_PREFERENCES) { + if (_socketCryptoCap.supports(cap)) { preferred = cap; break; } } - if(null == preferred) - { + if (null == preferred) { throw new RuntimeException("No in-common exchange algorithm"); } @@ -552,30 +535,27 @@ public class SocketManager { /** * Returns the negotiated symmetric cryptographic algorithm to be used for socket + * * @return Algorithm capability * @throws RuntimeException Thrown if no algorithm is available */ - private Capability getSocketSymmCrypto() throws RuntimeException - { + private Capability getSocketSymmCrypto() throws RuntimeException { Capability preferred = null; // No exchange for legacy crypto - if(_socketCryptoCap.getCryptoGen() == CryptoGen.LEGACY) { + if (_socketCryptoCap.getCryptoGen() == CryptoGen.LEGACY) { return Capability.NO_CRYPTO; } // Stop at first found - for(Capability cap : Capability.CRYPTO_SYMM_PREFERENCES) - { - if(_socketCryptoCap.supports(cap)) - { + for (Capability cap : Capability.CRYPTO_SYMM_PREFERENCES) { + if (_socketCryptoCap.supports(cap)) { preferred = cap; break; } } - if(null == preferred) - { + if (null == preferred) { throw new RuntimeException("No in-common symmetric algorithm"); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java index f86dfd2..ad0cf3a 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/Capability.java @@ -196,7 +196,7 @@ public enum Capability { /** * Array containing all the features that are supported by default in this version */ - public static final Capability[] DEFAULT_FEATURES = new Capability[] { + public static final Capability[] DEFAULT_FEATURES = new Capability[]{ FEAT_OS, FEAT_CPU_ARCH, FEAT_JRE_VERSION, @@ -217,6 +217,7 @@ public enum Capability { /** * Array containing the order of preference for the cryptographic algorithms to use for the key exchange + * * @implNote The higher an element is in the array, the most preferred it is */ public static final Capability[] CRYPTO_EXCH_PREFERENCES = new Capability[]{ @@ -231,6 +232,7 @@ public enum Capability { /** * Array containing the order of preference for the cryptographic algorithms to use for encryption + * * @implNote The higher an element is in the array, the most preferred it is */ public static final Capability[] CRYPTO_SYMM_PREFERENCES = new Capability[]{ @@ -246,6 +248,7 @@ public enum Capability { /** * Attributes a bit index to the capability being created + * * @param bitIndex Bit index */ Capability(int bitIndex) { diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoCapability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoCapability.java index 9a796dd..ceb6832 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoCapability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoCapability.java @@ -34,14 +34,14 @@ public class CryptoCapability extends FeatCapability { /** * Sets the cryptographic generation for this capability + * * @param generation Generation to set */ - public void setCryptoGen(CryptoGen generation) - { - byte bits = (byte)generation.ordinal(); - for(int i = 0; i < 8; ++i) { - byte power = (byte)(1 << i); - if((bits & power) == power) { + public void setCryptoGen(CryptoGen generation) { + byte bits = (byte) generation.ordinal(); + for (int i = 0; i < 8; ++i) { + byte power = (byte) (1 << i); + if ((bits & power) == power) { this.bitmap = this.bitmap.setBit(i); } } @@ -49,10 +49,10 @@ public class CryptoCapability extends FeatCapability { /** * Gets the cryptographic generation set in this capability + * * @return The currently-set cryptographic generation */ - public CryptoGen getCryptoGen() - { + public CryptoGen getCryptoGen() { BigInteger maskedGen = this.bitmap.and(new BigInteger(new byte[]{CryptoGen.GEN_MASK})); return CryptoGen.of(maskedGen.intValue()); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoGen.java b/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoGen.java index da8a8cc..b9910fa 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoGen.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/CryptoGen.java @@ -50,17 +50,17 @@ public enum CryptoGen { /** * Retrieves the cryptographic generation with the value provided + * * @param val Value to look for * @return Enum entry if found, null if not found */ - public static CryptoGen of(int val) - { - for(CryptoGen gen : CryptoGen.values()) { - if(gen.ordinal() == val) { + public static CryptoGen of(int val) { + for (CryptoGen gen : CryptoGen.values()) { + if (gen.ordinal() == val) { return gen; } } - + return null; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java index 23c1389..2284e29 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/FeatCapability.java @@ -55,26 +55,26 @@ public class FeatCapability implements ICapability { @Override public void enable(Capability capability) { - if(capability != Capability.ALWAYS_ACTIVE && capability.bitIndex < BITMAP_MAX_BITS) { + if (capability != Capability.ALWAYS_ACTIVE && capability.bitIndex < BITMAP_MAX_BITS) { bitmap = bitmap.setBit(capability.bitIndex); } } @Override public void enable(Capability[] capabilities) { - for(Capability cap : capabilities) { + for (Capability cap : capabilities) { enable(cap); } } public void disable(Capability capability) { - if(capability != Capability.ALWAYS_ACTIVE) { + if (capability != Capability.ALWAYS_ACTIVE) { bitmap = bitmap.clearBit(capability.bitIndex); } } public boolean supports(Capability capability) { - if(capability == Capability.ALWAYS_ACTIVE) { + if (capability == Capability.ALWAYS_ACTIVE) { return true; } return bitmap.testBit(capability.bitIndex); @@ -86,13 +86,10 @@ public class FeatCapability implements ICapability { } @Override - public boolean equals(ICapability other) - { - for(int i = 0; i < BITMAP_MAX_BITS; ++i) - { + public boolean equals(ICapability other) { + for (int i = 0; i < BITMAP_MAX_BITS; ++i) { // Stop at first non-equal bit - if(other.supports(i) ^ this.supports(i)) - { + if (other.supports(i) ^ this.supports(i)) { return false; } } @@ -101,13 +98,10 @@ public class FeatCapability implements ICapability { } @Override - public void intersect(ICapability other) - { - for(int i = 0; i < BITMAP_MAX_BITS; ++i) - { + public void intersect(ICapability other) { + for (int i = 0; i < BITMAP_MAX_BITS; ++i) { // Clear all not in-common bits - if(!(other.supports(i) && this.supports(i))) - { + if (!(other.supports(i) && this.supports(i))) { this.bitmap = this.bitmap.clearBit(i); } } @@ -117,12 +111,12 @@ public class FeatCapability implements ICapability { public byte[] exportPayload() { byte[] outBuffer = new byte[BITMAP_MAX_BYTES]; byte[] bmpArray = bitmap.toByteArray(); - + // Copy all bytes, one by one, to the output buffer - for(int bmpIndex = 0, outIndex = outBuffer.length - bmpArray.length; outIndex < outBuffer.length; bmpIndex++, outIndex++) { + for (int bmpIndex = 0, outIndex = outBuffer.length - bmpArray.length; outIndex < outBuffer.length; bmpIndex++, outIndex++) { outBuffer[outIndex] = bmpArray[bmpIndex]; } - + return outBuffer; } diff --git a/mods/common/src/main/java/me/peteras17/beacon/cap/ICapability.java b/mods/common/src/main/java/me/peteras17/beacon/cap/ICapability.java index 72af3d8..e3b8999 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cap/ICapability.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cap/ICapability.java @@ -34,39 +34,46 @@ public interface ICapability { /** * Enable a specific capability + * * @param capability Capability to enable */ void enable(Capability capability); /** * Enables multiple capabilities at once + * * @param capabilities Capabilities to enable */ void enable(Capability[] capabilities); /** * Disable a specific capability + * * @param capability Capability to disable */ + @SuppressWarnings("unused") void disable(Capability capability); /** * Checks whether the provided capability is enabled + * * @param capability Capability to check * @return True if enabled, false if not */ boolean supports(Capability capability); - + /** * Checks whether the provided bit is enabled + * * @param bit Bit to check - * @apiNote Please prefer .supports(Capability) * @return True if enabled, false if not + * @apiNote Please prefer .supports(Capability) */ boolean supports(int bit); /** * Checks whether this object's bitmap is entirely equal to another object's + * * @return True if they're equal, false if not */ boolean equals(ICapability other); @@ -74,24 +81,28 @@ public interface ICapability { /** * Intersects all supported capabilities between this object and another object's. * After call, this object's bitmap will be the intersection of both objects + * * @param other Other capability object */ void intersect(ICapability other); /** * Converts a 128-long byte array into a capability bitmap + * * @param payload Array, big-endian */ void importPayload(byte[] payload); /** * Formats this capability bitmap into a 128-long byte array + * * @return Array, big-endian */ byte[] exportPayload(); /** * Returns a copy of this capability object + * * @return A copy */ ICapability copy(); diff --git a/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java b/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java index a04013d..70c0801 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cmd/Command.java @@ -40,7 +40,7 @@ public class Command { * Command name */ private final String name; - + /** * List of subcommands this command accepts */ @@ -59,13 +59,13 @@ public class Command { /** * Creates a new root command. Name is automatically converted to lower-case - * @param name Command name for Beacon mod users to use + * + * @param name Command name for Beacon mod users to use * @param callback Callback function to execute the command. * Argument is always of type com.mojang.brigadier.context.CommandContext. * Returns the execution result */ - public Command(String name, Function callback) - { + public Command(String name, Function callback) { this.name = name.toLowerCase(); this.callback = callback; this.subcommands = new LinkedList<>(); @@ -74,33 +74,34 @@ public class Command { /** * Creates a subcommand. Name is automatically converted to lower-case - * @param name Command name for Beacon mod users to use + * + * @param name Command name for Beacon mod users to use * @param callback Callback function to execute the command. * Argument is always of type com.mojang.brigadier.context.CommandContext. * Returns the execution result - * @param parent Subcommand's parent + * @param parent Subcommand's parent */ - private Command(String name, Function callback, Command parent) - { + private Command(String name, Function callback, Command parent) { this(name, callback); - - if(null != parent) { + + if (null != parent) { this.root = parent.root; - } + } } /** * Returns this command's name + * * @return The command's name */ - public String getName() - { + public String getName() { return name; } /** * Creates a new subcommand for this command - * @param name Command name for Beacon mod users to use + * + * @param name Command name for Beacon mod users to use * @param callback Callback function to execute the command. * Argument is always of type com.mojang.brigadier.context.CommandContext. * Returns the execution result @@ -108,13 +109,11 @@ public class Command { * @throws IllegalArgumentException Thrown if another subcommand with the same name already exists */ @SuppressWarnings("unused") // Used in server-specific code - public Command appendSubcommand(String name, Function callback) throws IllegalArgumentException - { - if(subcommands.stream().anyMatch(c -> c.getName().equalsIgnoreCase(name))) - { + public Command appendSubcommand(String name, Function callback) throws IllegalArgumentException { + if (subcommands.stream().anyMatch(c -> c.getName().equalsIgnoreCase(name))) { throw new IllegalArgumentException("Subcommand already exists!"); } - + Command command = new Command(name, callback, this); subcommands.add(command); return command; @@ -122,36 +121,37 @@ public class Command { /** * Returns whether this command can take arguments entered by the user + * * @return True if command can take arguments (no subcommands), false if not */ - public boolean takesArgs() - { + public boolean takesArgs() { return subcommands.isEmpty(); } /** * Retrieves a subcommand based on the given name + * * @param name Name of the subcommand to retrieve * @return Retrieved subcommand if found, null if not found */ @SuppressWarnings("unused") // Used in server-specific code - public Command getSubcommand(String name) - { + public Command getSubcommand(String name) { return subcommands.stream().filter(c -> c.name.equalsIgnoreCase(name)).findFirst().orElse(null); } /** * Returns all registered subcommands for this command + * * @return Array containing subcommands */ @SuppressWarnings("unused") // Used in server-specific code - public Command[] getSubcommands() - { + public Command[] getSubcommands() { return subcommands.toArray(new Command[0]); } /** * Executes this command + * * @param context Command execution context * @return Execution result */ diff --git a/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java b/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java index ef86a36..08eae19 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java +++ b/mods/common/src/main/java/me/peteras17/beacon/cmd/ExecResult.java @@ -31,9 +31,10 @@ import me.peteras17.beacon.BeaconStatus; /** * Contains a command execution result + * * @param status Execution status * @param result Execution result message if status == BeaconStatus.OK, or empty * Result is sent as a message to the entity running the command */ -public record ExecResult(BeaconStatus status, String result) { +public record ExecResult(BeaconStatus status, String result) { } diff --git a/mods/common/src/main/java/me/peteras17/beacon/data/ServerType.java b/mods/common/src/main/java/me/peteras17/beacon/data/ServerType.java index 7fb3c04..f70e95f 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/data/ServerType.java +++ b/mods/common/src/main/java/me/peteras17/beacon/data/ServerType.java @@ -30,13 +30,14 @@ package me.peteras17.beacon.data; /** * Lists the server types */ +@SuppressWarnings("unused") public enum ServerType { /** * Unknown type */ OTHER, - + /** * Vanilla Minecraft server */ diff --git a/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java b/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java index 0068267..413ac76 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java +++ b/mods/common/src/main/java/me/peteras17/beacon/logs/Interceptor.java @@ -72,8 +72,9 @@ public class Interceptor extends AbstractAppender { /** * Creates a new intercepting appender instance, and automatically attaches it + * * @param maxMessages Maximum number of messages to keep in the logs queue - * @param minLevel Minimum acceptable level (inclusive) of events to intercept + * @param minLevel Minimum acceptable level (inclusive) of events to intercept */ public Interceptor(int maxMessages, Level minLevel, SocketManager socketMgr) { super(APPENDER_NAME, null, null, false, null); @@ -86,7 +87,7 @@ public class Interceptor extends AbstractAppender { LoggerContext logContext = (LoggerContext) LogManager.getContext(false); Configuration logConfig = logContext.getConfiguration(); LoggerConfig loggerConfig = logConfig.getRootLogger(); - + // Start and attach appender this.start(); logConfig.addAppender(this); @@ -96,15 +97,16 @@ public class Interceptor extends AbstractAppender { /** * Receives an event to append + * * @param event The LogEvent. */ @Override public void append(LogEvent event) { - + // Reject events not "strong" enough to intercept - if(event.getLevel().intLevel() <= _minLevel) { + if (event.getLevel().intLevel() <= _minLevel) { // Avoid overflowing the queue - if(_queue.size() >= _maxMessages) { + if (_queue.size() >= _maxMessages) { _queue.remove(); } @@ -112,9 +114,9 @@ public class Interceptor extends AbstractAppender { String msg = event.getMessage().getFormattedMessage(); _queue.add(msg); } - + // Send all logs in queue if possible - if(!_queue.isEmpty() && _socketMgr.isOpen()) { + if (!_queue.isEmpty() && _socketMgr.isOpen()) { _socketMgr.sendOp(new Log(String.join("\n", _queue))); _queue.clear(); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java index 5a118c5..f6e48e3 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetric.java @@ -39,31 +39,36 @@ public interface IMetric { /** * Returns this metric instance's type + * * @return Metric type */ MetricType getType(); /** * Returns this metric instance's name (metric type name) + * * @return Metric name */ String getName(); /** * Returns the capability the other party must support in order to use this metric + * * @return Capability value */ Capability getNeededCapability(); /** * Serializes this object into a JSON object node - * @param on Object node to use to serialize this object into + * + * @param on Object node to use to serialize this object into * @param capMgr Capability manager instance, allowing function to know whether to serialize or not */ void serialize(ObjectNode on, ICapability capMgr); /** * Checks whether this metric or any metric contained within this one is of the provided type + * * @param metricType Type to look for * @return Null if not found, metric instance if found */ diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java index 2d31cde..9cd0ade 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/IMetricProvider.java @@ -34,6 +34,7 @@ public interface IMetricProvider { /** * Registers this provider to the provided root group + * * @param rootGroup Group to register provider to * @throws IllegalArgumentException Raised in case the metric type of * the metrics that the provider tried @@ -43,6 +44,7 @@ public interface IMetricProvider { /** * Makes the provider stop loading new metrics, if possible + * * @apiNote Useful mostly for providers that manage threads */ void stop(); diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java index 0c7498d..332f9a5 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricCollection.java @@ -58,16 +58,17 @@ public class MetricCollection implements IMetric { /** * Creates a new metric collection, which acts like a JSON list of sets + * * @param metricType Metric type represented by this instance * @param capability Capability needed in order to serialize this object - * @param callback Callback used to retrieve the list of sets + * @param callback Callback used to retrieve the list of sets */ public MetricCollection(MetricType metricType, Capability capability, Supplier> callback) { this.metricType = metricType; this.capability = capability; this.callback = callback; } - + @Override public MetricType getType() { return metricType; @@ -87,25 +88,24 @@ public class MetricCollection implements IMetric { public void serialize(ObjectNode on, ICapability capMgr) { // Ignore call if unsupported - if(!capMgr.supports(capability)) + if (!capMgr.supports(capability)) return; // Check if any other IMetrics are inside the received list List parsedList = new LinkedList<>(); - - for(Object obj : callback.get()) { - if(obj instanceof IMetric) { + + for (Object obj : callback.get()) { + if (obj instanceof IMetric) { // Serialize any metrics inside ObjectNode innerNode = on.objectNode(); ((IMetric) obj).serialize(innerNode, capMgr); parsedList.add(innerNode); - } - else { + } else { // Otherwise, just add them as-is parsedList.add(obj); } } - + on.putPOJO(getName(), parsedList); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java index d16d705..c336361 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricGroup.java @@ -59,12 +59,13 @@ public class MetricGroup implements IMetric { */ private final boolean needsNode; - + /** * Creates a new group of metrics + * * @param metricType Metric type represented by this object * @param capability Capability needed to serialize this object - * @param needsNode Does this group need a node? Value to False is useful if not is a list item + * @param needsNode Does this group need a node? Value to False is useful if not is a list item */ public MetricGroup(MetricType metricType, Capability capability, boolean needsNode) { metrics = new ArrayList<>(); @@ -75,6 +76,7 @@ public class MetricGroup implements IMetric { /** * Creates a new group of metrics + * * @param metricType Metric type represented by this object * @param capability Capability needed to serialize this object */ @@ -84,17 +86,16 @@ public class MetricGroup implements IMetric { /** * Adds a new metric to this metric group + * * @param metric Metric to add to the group * @throws IllegalArgumentException Raised in case type of provided metric already exists - * * @apiNote Thread-safe code */ public void addMetric(IMetric metric) throws IllegalArgumentException { - synchronized (metrics) - { + synchronized (metrics) { // Check for duplicated metric types between what we have and what the other metric has - for(MetricType metricType : MetricType.values()) { - if(null != findMetric(metricType) && null != metric.findMetric(metricType)) { + for (MetricType metricType : MetricType.values()) { + if (null != findMetric(metricType) && null != metric.findMetric(metricType)) { throw new IllegalArgumentException(String.format("Metric type %s is duplicate", metricType.name())); } } @@ -102,7 +103,7 @@ public class MetricGroup implements IMetric { metrics.add(metric); } } - + @Override public MetricType getType() { return metricType; @@ -122,7 +123,7 @@ public class MetricGroup implements IMetric { public void serialize(ObjectNode on, ICapability capMgr) { // Ignore call if unsupported - if(!capMgr.supports(capability)) + if (!capMgr.supports(capability)) return; // Serialize every metric inside @@ -130,10 +131,10 @@ public class MetricGroup implements IMetric { // Only create a node if needed ObjectNode innerNode = on; - if(needsNode) { - innerNode = on.withObject(getName()); + if (needsNode) { + innerNode = on.withObject(getName()); } - + for (IMetric metric : metrics) { metric.serialize(innerNode, capMgr); } @@ -142,7 +143,7 @@ public class MetricGroup implements IMetric { @Override public IMetric findMetric(MetricType metricType) { - if(getType() == metricType) { + if (getType() == metricType) { return this; } @@ -156,7 +157,7 @@ public class MetricGroup implements IMetric { } } } - + return foundMetric; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java index 02bda2a..f7dbdd4 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricMap.java @@ -57,16 +57,17 @@ public class MetricMap implements IMetric { /** * Creates a new metrics map, acting as a JSON set + * * @param metricType Type of metrics contained inside this object * @param capability Capability needed to serialize this object - * @param callback Callback to retrieve the set's values + * @param callback Callback to retrieve the set's values */ public MetricMap(MetricType metricType, Capability capability, Supplier> callback) { this.metricType = metricType; this.capability = capability; this.callback = callback; } - + @Override public String getName() { return getType().name(); @@ -81,9 +82,9 @@ public class MetricMap implements IMetric { public void serialize(ObjectNode on, ICapability capMgr) { // Ignore call if unsupported - if(!capMgr.supports(capability)) + if (!capMgr.supports(capability)) return; - + // Serialize every entry in the set ObjectNode setNode = on.withObject(getName()); for (Map.Entry setEntry : callback.get().entrySet()) { diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java index 6f25bbe..72a5cf0 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricNode.java @@ -55,16 +55,17 @@ public class MetricNode implements IMetric { /** * Creates a new metric node + * * @param metricType Metric type represented by this node * @param capability Capability needed to serialize this node - * @param callback Callback used to retrieve this node's value + * @param callback Callback used to retrieve this node's value */ public MetricNode(MetricType metricType, Capability capability, Supplier callback) { this.metricType = metricType; this.capability = capability; this.callback = callback; } - + @Override public String getName() { return getType().name(); @@ -77,11 +78,11 @@ public class MetricNode implements IMetric { @Override public void serialize(ObjectNode on, ICapability capMgr) { - + // Ignore call if unsupported - if(!capMgr.supports(capability)) + if (!capMgr.supports(capability)) return; - + on.putPOJO(getName(), callback.get()); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java index 9a1fa0d..b9e0e26 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/MetricType.java @@ -31,17 +31,17 @@ package me.peteras17.beacon.metrics; * An enumeration of all supported metric types */ public enum MetricType { - + /* * Root category */ - + ROOT, - + /* * Group categories */ - + MOD, HOST, SERVER, @@ -56,43 +56,43 @@ public enum MetricType { DIMENSIONS, GAME_RULES, TIMESTAMP, - + /* * Metric names */ - + MOD_VERSION, MOD_SERVER_ID, MOD_SERVER_NAME, - + OS_NAME, OS_VERSION, - + HEAP_FREE, HEAP_USED, HEAP_MAX, NON_HEAP_FREE, NON_HEAP_USED, NON_HEAP_MAX, - + CPU_ARCH, CPU_USAGE, CPU_CORES, - + WRITE_SPEED, READ_SPEED, IO_DELAY, - + JVM_ARGS, JRE_VERSION, - + SERVER_TYPE, SERVER_MINECRAFT_VERSION, SERVER_PLAYER_COUNT, SERVER_MAX_PLAYER_COUNT, SERVER_UPTIME, SERVER_MOTD, - + PLAYER_GUID, PLAYER_USERNAME, PLAYER_SESSION_PLAYTIME, @@ -105,7 +105,7 @@ public enum MetricType { PLAYER_HUNGER, PLAYER_SATURATION, PLAYER_XP, - + WORLD_NAME, WORLD_TYPE, WORLD_DIFFICULTY, diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/IO.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/IO.java index f66e13d..75f1334 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/IO.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/IO.java @@ -94,7 +94,7 @@ class IO implements IMetricProvider { * Last measured write speed, in bytes per second */ private double _lastWriteSpeed; - + /** * Last measured read speed, in bytes per second */ @@ -103,35 +103,33 @@ class IO implements IMetricProvider { /** * Default constructor */ - IO() - { + IO() { _ioBuffer = new byte[IO.IO_BUFFER_SIZE]; _random = new Random(); _ioGroup = new MetricGroup(MetricType.IO, Capability.ALWAYS_ACTIVE); _thread = new Thread(this::threadEntrypoint); - + // Setup thread _thread.setDaemon(true); _thread.setName(IO.THREAD_NAME); _thread.setPriority(Thread.MAX_PRIORITY); _thread.start(); } - - private void threadEntrypoint() - { + + private void threadEntrypoint() { // Get .jar's directory, so the temporary file is created there String libPath = ManagementFactory.getRuntimeMXBean().getSystemProperties().get("user.dir"); Path serverDir = Path.of(libPath); long accessStartTime, accessEndTime; long writeStartTime, writeEndTime; long readStartTime, readEndTime; - + /* Controlled infinite loop */ - while(!Thread.interrupted()) { - + while (!Thread.interrupted()) { + // Make it thread-safe :) synchronized (_ioBuffer) { - + // Generate new random data _random.nextBytes(_ioBuffer); @@ -140,8 +138,8 @@ class IO implements IMetricProvider { // Measure time needed to open file accessStartTime = System.nanoTime(); tmpFile = Files.createTempFile(serverDir, ".", ".tmp").toFile(); - try(FileOutputStream fos = new FileOutputStream(tmpFile, false); - BufferedOutputStream bos = new BufferedOutputStream(fos, IO.IO_BUFFER_SIZE)) { + try (FileOutputStream fos = new FileOutputStream(tmpFile, false); + BufferedOutputStream bos = new BufferedOutputStream(fos, IO.IO_BUFFER_SIZE)) { bos.flush(); accessEndTime = System.nanoTime(); @@ -156,11 +154,11 @@ class IO implements IMetricProvider { accessEndTime = accessStartTime; } - try(FileInputStream fis = new FileInputStream(tmpFile); - BufferedInputStream bis = new BufferedInputStream(fis, IO.IO_BUFFER_SIZE)) { + try (FileInputStream fis = new FileInputStream(tmpFile); + BufferedInputStream bis = new BufferedInputStream(fis, IO.IO_BUFFER_SIZE)) { // Perform read readStartTime = System.nanoTime(); - if(-1 == bis.read(_ioBuffer, 0, IO.IO_BUFFER_SIZE)) { + if (-1 == bis.read(_ioBuffer, 0, IO.IO_BUFFER_SIZE)) { throw new IOException(); } readEndTime = System.nanoTime(); @@ -180,18 +178,16 @@ class IO implements IMetricProvider { _lastAccessTime = accessEndTime - accessStartTime; // May cause division by 0 if unchecked - if((writeEndTime - writeStartTime) > 0) { + if ((writeEndTime - writeStartTime) > 0) { _lastWriteSpeed = IO.IO_BUFFER_SIZE / ((writeEndTime - writeStartTime) / IO.ONE_SEC_IN_NS); // Divide by 1s in ns - } - else { + } else { _lastWriteSpeed = 0; } // May cause division by 0 if unchecked - if((readEndTime - readStartTime) > 0) { + if ((readEndTime - readStartTime) > 0) { _lastReadSpeed = IO.IO_BUFFER_SIZE / ((readEndTime - readStartTime) / IO.ONE_SEC_IN_NS); // Divide by 1s in ns - } - else { + } else { _lastReadSpeed = 0; } } @@ -206,14 +202,26 @@ class IO implements IMetricProvider { @Override public void register(MetricGroup rootGroup) throws IllegalArgumentException { - _ioGroup.addMetric(new MetricNode(MetricType.READ_SPEED, Capability.FEATS_IO_READ, () -> { synchronized (_ioBuffer) { return _lastReadSpeed; } })); - _ioGroup.addMetric(new MetricNode(MetricType.WRITE_SPEED, Capability.FEATS_IO_WRITE, () -> { synchronized (_ioBuffer) { return _lastWriteSpeed; } })); - _ioGroup.addMetric(new MetricNode(MetricType.IO_DELAY, Capability.ALWAYS_ACTIVE, () -> { synchronized (_ioBuffer) { return _lastAccessTime; } })); - + _ioGroup.addMetric(new MetricNode(MetricType.READ_SPEED, Capability.FEATS_IO_READ, () -> { + synchronized (_ioBuffer) { + return _lastReadSpeed; + } + })); + _ioGroup.addMetric(new MetricNode(MetricType.WRITE_SPEED, Capability.FEATS_IO_WRITE, () -> { + synchronized (_ioBuffer) { + return _lastWriteSpeed; + } + })); + _ioGroup.addMetric(new MetricNode(MetricType.IO_DELAY, Capability.ALWAYS_ACTIVE, () -> { + synchronized (_ioBuffer) { + return _lastAccessTime; + } + })); + // Append group to root rootGroup.addMetric(_ioGroup); } - + @Override public void stop() { diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/JVM.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/JVM.java index 883daaa..21dde37 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/JVM.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/JVM.java @@ -54,8 +54,7 @@ class JVM implements IMetricProvider { /** * Default constructor */ - JVM() - { + JVM() { _jvmGroup = new MetricGroup(MetricType.JVM, Capability.ALWAYS_ACTIVE); _rtBean = ManagementFactory.getRuntimeMXBean(); } @@ -64,11 +63,12 @@ class JVM implements IMetricProvider { public void register(MetricGroup rootGroup) throws IllegalArgumentException { _jvmGroup.addMetric(new MetricNode(MetricType.JVM_ARGS, Capability.FEAT_LAUNCH_ARGS, _rtBean::getInputArguments)); _jvmGroup.addMetric(new MetricNode(MetricType.JRE_VERSION, Capability.FEAT_JRE_VERSION, _rtBean::getVmVersion)); - + // Append group to root rootGroup.addMetric(_jvmGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java index e790e83..3a0481d 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Memory.java @@ -54,38 +54,37 @@ class Memory implements IMetricProvider { /** * Default constructor */ - Memory() - { + Memory() { _memoryGroup = new MetricGroup(MetricType.RAM, Capability.ALWAYS_ACTIVE); _memoryBean = ManagementFactory.getMemoryMXBean(); } /** * Returns the number of free bytes of heap memory + * * @return Free bytes */ - private long getHeapFree() - { + private long getHeapFree() { long max = _memoryBean.getHeapMemoryUsage().getMax(); long used = _memoryBean.getHeapMemoryUsage().getUsed(); - - if(max == -1 || used == -1) { + + if (max == -1 || used == -1) { return -1; } - + return max - used; } /** * Returns the number of free bytes of non-heap memory + * * @return Free bytes */ - private long getNonHeapFree() - { + private long getNonHeapFree() { long max = _memoryBean.getNonHeapMemoryUsage().getMax(); long used = _memoryBean.getNonHeapMemoryUsage().getUsed(); - if(max == -1 || used == -1) { + if (max == -1 || used == -1) { return -1; } @@ -100,11 +99,12 @@ class Memory implements IMetricProvider { _memoryGroup.addMetric(new MetricNode(MetricType.NON_HEAP_FREE, Capability.ALWAYS_ACTIVE, this::getNonHeapFree)); _memoryGroup.addMetric(new MetricNode(MetricType.NON_HEAP_USED, Capability.FEAT_RAM_NON_HEAP_USED, _memoryBean.getNonHeapMemoryUsage()::getUsed)); _memoryGroup.addMetric(new MetricNode(MetricType.NON_HEAP_MAX, Capability.FEAT_RAM_NON_HEAP_MAX, _memoryBean.getNonHeapMemoryUsage()::getMax)); - + // Append group to root rootGroup.addMetric(_memoryGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java index c383fd3..a67bab7 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Mod.java @@ -65,5 +65,6 @@ public class Mod implements IMetricProvider { } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/OperatingSystem.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/OperatingSystem.java index 8ba44ab..d10ed20 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/OperatingSystem.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/OperatingSystem.java @@ -54,8 +54,7 @@ class OperatingSystem implements IMetricProvider { /** * Default constructor */ - OperatingSystem() - { + OperatingSystem() { _osGroup = new MetricGroup(MetricType.OS, Capability.FEAT_OS); _osBean = ManagementFactory.getOperatingSystemMXBean(); } @@ -64,11 +63,12 @@ class OperatingSystem implements IMetricProvider { public void register(MetricGroup rootGroup) throws IllegalArgumentException { _osGroup.addMetric(new MetricNode(MetricType.OS_NAME, Capability.FEAT_OS, _osBean::getName)); _osGroup.addMetric(new MetricNode(MetricType.OS_VERSION, Capability.FEAT_OS, _osBean::getVersion)); - + // Append group to root rootGroup.addMetric(_osGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Processor.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Processor.java index 3dfd0b3..43ffb3c 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Processor.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Processor.java @@ -54,28 +54,26 @@ class Processor implements IMetricProvider { /** * Default constructor */ - Processor() - { + Processor() { _cpuGroup = new MetricGroup(MetricType.CPU, Capability.ALWAYS_ACTIVE); _osBean = ManagementFactory.getOperatingSystemMXBean(); } /** * Returns the current CPU load, clamped to value between 0 and 1 + * * @return Load */ - private double getCpuLoad() - { + private double getCpuLoad() { double usage = _osBean.getSystemLoadAverage() / _osBean.getAvailableProcessors(); - + // Clamp to 100% if load is too high, or 0 if not available - if(usage > 1.0) { + if (usage > 1.0) { return 1.0; - } - else if(usage < 0.0) { + } else if (usage < 0.0) { return 0.0; } - + return usage; } @@ -84,11 +82,12 @@ class Processor implements IMetricProvider { _cpuGroup.addMetric(new MetricNode(MetricType.CPU_ARCH, Capability.FEAT_CPU_ARCH, _osBean::getArch)); _cpuGroup.addMetric(new MetricNode(MetricType.CPU_CORES, Capability.FEAT_JVM_CORES, _osBean::getAvailableProcessors)); _cpuGroup.addMetric(new MetricNode(MetricType.CPU_USAGE, Capability.FEAT_CPU_USAGE, this::getCpuLoad)); - + // Append group to root rootGroup.addMetric(_cpuGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java index 6695294..0af1b19 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java +++ b/mods/common/src/main/java/me/peteras17/beacon/metrics/providers/Timestamp.java @@ -43,5 +43,6 @@ public class Timestamp implements IMetricProvider { } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/IOperation.java b/mods/common/src/main/java/me/peteras17/beacon/socket/IOperation.java index 8dd9db0..6142367 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/IOperation.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/IOperation.java @@ -34,12 +34,14 @@ public interface IOperation { /** * Returns this operation object's opcode + * * @return Opcode corresponding to this object */ Opcode getOpcode(); /** * Attempts to build this operation object from a given byte array payload + * * @param payload Payload to use to build this operation object * @throws IllegalArgumentException Thrown if payload cannot be used to create operation object */ @@ -47,6 +49,7 @@ public interface IOperation { /** * Transforms this operation object into a byte array payload + * * @return Payload to be sent across the network */ byte[] serialize(); diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/Opcode.java b/mods/common/src/main/java/me/peteras17/beacon/socket/Opcode.java index d2698d7..fe6690e 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/Opcode.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/Opcode.java @@ -31,6 +31,11 @@ package me.peteras17.beacon.socket; * List of supported opcodes */ public enum Opcode { + + /* ****************** / + * BENIGN RESPONSES * + / *******************/ + /** * No-Op opcode */ @@ -41,6 +46,10 @@ public enum Opcode { */ ACK(0x01), + /* ****************** / + * HANDSHAKE PHASE * + / *******************/ + /** * Cryptographic algorithm exchange opcode */ @@ -61,6 +70,10 @@ public enum Opcode { */ CAP(0x13), + /* ****************** / + * POST-HANDSHAKE * + / *******************/ + /** * Mod information opcode */ @@ -81,6 +94,10 @@ public enum Opcode { */ CMD(0x23), + /* ****************** / + * ERROR RESPONSES * + / *******************/ + /** * Retry request opcode */ @@ -98,34 +115,34 @@ public enum Opcode { /** * Creates a new opcode with the provided number + * * @param opNbr Opcode number */ - Opcode(int opNbr) - { - this.opNbr = (byte)opNbr; + Opcode(int opNbr) { + this.opNbr = (byte) opNbr; } /** * Attempts to retrieve an opcode from the provided opcode byte + * * @param opcode Opcode byte, used to find the Opcode equivalent * @return Equivalent Opcode entry, if found * @throws IllegalArgumentException Thrown if no correspondence found */ - public static Opcode fromOp(byte opcode) throws IllegalArgumentException - { + public static Opcode fromOp(byte opcode) throws IllegalArgumentException { Opcode correspondence = null; - for(Opcode op : Opcode.values()) { - if(op.opNbr == opcode) { + for (Opcode op : Opcode.values()) { + if (op.opNbr == opcode) { correspondence = op; break; } } - + // Throw error if not found - if(correspondence == null) { + if (correspondence == null) { throw new IllegalArgumentException("Unknown opcode"); } - + return correspondence; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/SocketState.java b/mods/common/src/main/java/me/peteras17/beacon/socket/SocketState.java index 621dd1e..f6ec252 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/SocketState.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/SocketState.java @@ -39,7 +39,7 @@ public enum SocketState { /** * Socket connection has been accepted. Waiting for web server to send CRY opcode - */ + */ WAIT_WEB_CRY, /** diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Ack.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Ack.java index 2e24d49..e63457a 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Ack.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Ack.java @@ -38,22 +38,23 @@ public class Ack implements IOperation { public Opcode getOpcode() { return Opcode.ACK; } - - public Ack(){} + + public Ack() { + } @Override public void buildFrom(byte[] payload) throws IllegalArgumentException { - if(payload.length != 1) { + if (payload.length != 1) { throw new IllegalArgumentException("ACK takes no data"); } - - if(Opcode.fromOp(payload[0]) != getOpcode()) { + + if (Opcode.fromOp(payload[0]) != getOpcode()) { throw new IllegalArgumentException("Unmatched opcode"); } } @Override public byte[] serialize() { - return new byte[] {getOpcode().opNbr}; + return new byte[]{getOpcode().opNbr}; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cap.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cap.java index 97c6b81..a1bbca4 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cap.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cap.java @@ -35,17 +35,16 @@ import me.peteras17.beacon.socket.Opcode; * CAP operation */ public class Cap extends CapabilityOp { - + /** * Create CAP operation */ public Cap(ICapability capability) { super(capability); } - + @SuppressWarnings("unused") - public Cap() - { + public Cap() { this(new FeatCapability()); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/CapabilityOp.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/CapabilityOp.java index 0fbe30d..d7c0379 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/CapabilityOp.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/CapabilityOp.java @@ -43,28 +43,27 @@ public abstract class CapabilityOp implements IOperation { /** * Create a new capability operation with a capability instance + * * @param capability Capability to copy */ - public CapabilityOp(ICapability capability) - { + public CapabilityOp(ICapability capability) { this.capability = capability.copy(); } /** * Create an empty capability operation */ - public CapabilityOp() - { + public CapabilityOp() { this(new FeatCapability()); } @Override public void buildFrom(byte[] payload) throws IllegalArgumentException { - if(payload.length != (1 + FeatCapability.BITMAP_MAX_BYTES)) { + if (payload.length != (1 + FeatCapability.BITMAP_MAX_BYTES)) { throw new IllegalArgumentException("Wrong amount of data for CRY operation"); } - - if(Opcode.fromOp(payload[0]) != getOpcode()) { + + if (Opcode.fromOp(payload[0]) != getOpcode()) { throw new IllegalArgumentException("Unmatched opcode"); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cry.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cry.java index f0c99f4..4f3d895 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cry.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Cry.java @@ -34,7 +34,7 @@ import me.peteras17.beacon.socket.Opcode; * CRY operation */ public class Cry extends CapabilityOp { - + /** * Create CRY operation */ @@ -43,8 +43,7 @@ public class Cry extends CapabilityOp { } @SuppressWarnings("unused") - public Cry() - { + public Cry() { this(new CryptoCapability()); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Inf.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Inf.java index 6d7bd1f..af33496 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Inf.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Inf.java @@ -47,12 +47,11 @@ public class Inf extends JsonOp { public Opcode getOpcode() { return Opcode.INF; } - + /** * Create INF operation */ - public Inf(BeaconCommon commonLib, ICapability capability) - { + public Inf(BeaconCommon commonLib, ICapability capability) { IMetric modMetric = commonLib.getMetricManager().getMetric(MetricType.MOD); ObjectMapper mapper = new ObjectMapper(); try { diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Key.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Key.java index 8a901da..283369b 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Key.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Key.java @@ -45,8 +45,7 @@ public class Key implements IOperation { /** * Create NOK operation object with no message */ - public Key() - { + public Key() { throw new NotImplementedError(); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Log.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Log.java index d873077..6d2fbdc 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Log.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Log.java @@ -35,17 +35,16 @@ import java.nio.charset.StandardCharsets; * LOG operation */ public class Log extends JsonOp { - + @Override public Opcode getOpcode() { return Opcode.LOG; } - + /** * Create LOG operation */ - public Log(String logLine) - { + public Log(String logLine) { _payload = logLine.getBytes(StandardCharsets.UTF_8); } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/ModMtr.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/ModMtr.java index d3b28c7..114adca 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/ModMtr.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/ModMtr.java @@ -37,17 +37,16 @@ import java.nio.charset.StandardCharsets; * MTR operation */ public class ModMtr extends JsonOp { - + @Override public Opcode getOpcode() { return Opcode.MTR; } - + /** * Create MTR operation */ - public ModMtr(BeaconCommon commonLib, ICapability capability) - { + public ModMtr(BeaconCommon commonLib, ICapability capability) { String metrics = commonLib.getMetricManager().getLastValues(capability); _payload = metrics.getBytes(StandardCharsets.UTF_8); } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nok.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nok.java index 5c9e129..4504519 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nok.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nok.java @@ -44,10 +44,10 @@ public class Nok extends JsonOp { /** * Create NOK operation object with a message + * * @param message Message for operation */ - public Nok(String message) - { + public Nok(String message) { _payload = message.getBytes(StandardCharsets.UTF_8); } @@ -55,8 +55,7 @@ public class Nok extends JsonOp { * Create NOK operation object with no message */ @SuppressWarnings("unused") - public Nok() - { + public Nok() { this("No message provided"); } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nop.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nop.java index 924a541..96a79f6 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nop.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Nop.java @@ -40,22 +40,22 @@ public class Nop implements IOperation { } @SuppressWarnings("unused") - public Nop() - { } + public Nop() { + } @Override public void buildFrom(byte[] payload) throws IllegalArgumentException { - if(payload.length != 1) { + if (payload.length != 1) { throw new IllegalArgumentException("NOP takes no data"); } - - if(Opcode.fromOp(payload[0]) != getOpcode()) { + + if (Opcode.fromOp(payload[0]) != getOpcode()) { throw new IllegalArgumentException("Unmatched opcode"); } } @Override public byte[] serialize() { - return new byte[] {getOpcode().opNbr}; + return new byte[]{getOpcode().opNbr}; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Rty.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Rty.java index 2e0c4c6..ad7a606 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Rty.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Rty.java @@ -40,22 +40,22 @@ public class Rty implements IOperation { } @SuppressWarnings("unused") - public Rty() - { } + public Rty() { + } @Override public void buildFrom(byte[] payload) throws IllegalArgumentException { - if(payload.length != 1) { + if (payload.length != 1) { throw new IllegalArgumentException("RTY takes no data"); } - - if(Opcode.fromOp(payload[0]) != getOpcode()) { + + if (Opcode.fromOp(payload[0]) != getOpcode()) { throw new IllegalArgumentException("Unmatched opcode"); } } @Override public byte[] serialize() { - return new byte[] {getOpcode().opNbr}; + return new byte[]{getOpcode().opNbr}; } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Sel.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Sel.java index 9342757..2cab9f5 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Sel.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/Sel.java @@ -40,8 +40,7 @@ public class Sel extends CapabilityOp { } @SuppressWarnings("unused") - public Sel() - { + public Sel() { super(); } } diff --git a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/WebMtr.java b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/WebMtr.java index b331707..637b817 100644 --- a/mods/common/src/main/java/me/peteras17/beacon/socket/ops/WebMtr.java +++ b/mods/common/src/main/java/me/peteras17/beacon/socket/ops/WebMtr.java @@ -33,7 +33,7 @@ import me.peteras17.beacon.socket.Opcode; * MTR operation, from web server */ public class WebMtr extends JsonOp { - + @Override public Opcode getOpcode() { return Opcode.MTR; @@ -41,18 +41,17 @@ public class WebMtr extends JsonOp { @SuppressWarnings("unused") - public WebMtr() - { + public WebMtr() { _payload = new byte[0]; } @Override public void buildFrom(byte[] payload) throws IllegalArgumentException { - if(payload.length < 1) { + if (payload.length < 1) { throw new IllegalArgumentException(); } - - if(payload[0] != getOpcode().opNbr) { + + if (payload[0] != getOpcode().opNbr) { throw new IllegalArgumentException(); } } diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/BeaconServer.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/BeaconServer.java index efa26ce..25764c5 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/BeaconServer.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/BeaconServer.java @@ -28,6 +28,7 @@ package me.peteras17.beacon.fabric; import com.mojang.brigadier.context.CommandContext; +import me.peteras17.beacon.BeaconCommon; import me.peteras17.beacon.BeaconStatus; import me.peteras17.beacon.cmd.ExecResult; import me.peteras17.beacon.fabric.metrics.Server; @@ -38,7 +39,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.ServerCommandSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import me.peteras17.beacon.BeaconCommon; import java.util.concurrent.atomic.AtomicReference; @@ -53,15 +53,15 @@ public class BeaconServer implements ModInitializer { BeaconCommon common = new BeaconCommon(); CommandCenter cmdCenter = new CommandCenter(); AtomicReference srv = new AtomicReference<>(); - + // Create all commands common.getCmdManager() .getRootCommand() .appendSubcommand("about", (o) -> { @SuppressWarnings("unchecked") CommandContext src = (CommandContext) o; - return new ExecResult(BeaconStatus.OK, "OK!"); - }); - + return new ExecResult(BeaconStatus.OK, "OK!"); + }); + // Pre-heat common library common.beaconPreHeat(cmdCenter); @@ -80,5 +80,5 @@ public class BeaconServer implements ModInitializer { // Request the command registry to call the command center's .register() function CommandRegistrationCallback.EVENT.register(cmdCenter::register); } - + } diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Players.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Players.java index 4be17c1..5a3f479 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Players.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Players.java @@ -43,8 +43,8 @@ import java.util.Optional; * Metric provider for player information * * @implNote This class is not to be considered to be a true, root metric - * provider. Its usage must be confined to Server class, found in - * the same package + * provider. Its usage must be confined to Server class, found in + * the same package */ class Players implements IMetricProvider { @@ -62,36 +62,36 @@ class Players implements IMetricProvider { * Collection of metrics for each one of the players */ private final MetricCollection _metricCollection; - + private final ScoreboardCriterion _playtimeStat; /** * Creates the instance for the players metrics provider + * * @param mcServer Minecraft server instance */ public Players(MinecraftServer mcServer) { _mcServer = mcServer; _metricCollection = new MetricCollection(MetricType.PLAYERS, Capability.FEAT_PLAYERS_LIST, this::supply); - + Optional optionalStat = Stat.getOrCreateStatCriterion(PLAYTIME_CRITERIA_NAME_PREFIX); - if(optionalStat.isEmpty()) { + if (optionalStat.isEmpty()) { throw new IllegalStateException("Playtime stat not found in server!"); } _playtimeStat = optionalStat.get(); } - private List supply() - { + private List supply() { List metricList = new LinkedList<>(); float tickRate = _mcServer.getTickManager().getTickRate(); - + // Iterate through all the players, and create their metrics _mcServer.getPlayerManager().getPlayerList().forEach(player -> { MetricGroup playerMetrics = new MetricGroup(MetricType.PLAYERS, Capability.FEAT_PLAYERS_LIST, false); playerMetrics.addMetric(new MetricNode(MetricType.PLAYER_GUID, Capability.FEAT_PLAYERS_LIST, player.getUuid()::toString)); playerMetrics.addMetric(new MetricNode(MetricType.PLAYER_USERNAME, Capability.FEAT_PLAYERS_LIST, player.getName()::getString)); playerMetrics.addMetric(new MetricNode(MetricType.PLAYER_IS_OP, Capability.FEAT_PLAYERS_LIST, () -> player.getPermissionLevel() >= 3)); - playerMetrics.addMetric(new MetricNode(MetricType.WORLD_NAME, Capability.FEAT_PLAYERS_LIST, ((LevelProperties)player.getWorld().getLevelProperties())::getLevelName)); + playerMetrics.addMetric(new MetricNode(MetricType.WORLD_NAME, Capability.FEAT_PLAYERS_LIST, ((LevelProperties) player.getWorld().getLevelProperties())::getLevelName)); //noinspection OptionalGetWithoutIsPresent playerMetrics.addMetric(new MetricNode(MetricType.WORLD_TYPE, Capability.FEAT_PLAYERS_LIST, player.getWorld().getDimensionEntry().getKey().get().getValue()::toString)); playerMetrics.addMetric(new MetricNode(MetricType.PLAYER_POS_X, Capability.FEAT_PLAYERS_LIST, () -> player.getPos().x)); @@ -105,7 +105,7 @@ class Players implements IMetricProvider { playerMetrics.addMetric(new MetricNode(MetricType.PLAYER_TOTAL_PLAYTIME, Capability.FEAT_PLAYERS_LIST, () -> player.getStatHandler().getStat((Stat) _playtimeStat) / tickRate)); metricList.add(playerMetrics); }); - + return metricList; } @@ -115,5 +115,6 @@ class Players implements IMetricProvider { } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Properties.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Properties.java index 8a0e444..936d30f 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Properties.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Properties.java @@ -41,8 +41,8 @@ import java.lang.management.ManagementFactory; * Metric provider for server properties * * @implNote This class is not to be considered to be a true, root metric - * provider. Its usage must be confined to Server class, found in - * the same package + * provider. Its usage must be confined to Server class, found in + * the same package */ public class Properties implements IMetricProvider { @@ -50,9 +50,10 @@ public class Properties implements IMetricProvider { * Minecraft server instance */ private final MinecraftServer _mcServer; - + /** * Creates the instance for the server properties metrics provider + * * @param mcServer Minecraft server instance */ public Properties(MinecraftServer mcServer) { @@ -61,7 +62,7 @@ public class Properties implements IMetricProvider { @Override public void register(MetricGroup rootGroup) throws IllegalArgumentException { - + MetricGroup _propertiesGroup = new MetricGroup(MetricType.PROPERTIES, Capability.ALWAYS_ACTIVE); // Create all metrics @@ -71,11 +72,12 @@ public class Properties implements IMetricProvider { _propertiesGroup.addMetric(new MetricNode(MetricType.SERVER_MAX_PLAYER_COUNT, Capability.ALWAYS_ACTIVE, _mcServer::getMaxPlayerCount)); _propertiesGroup.addMetric(new MetricNode(MetricType.SERVER_MOTD, Capability.ALWAYS_ACTIVE, _mcServer::getServerMotd)); _propertiesGroup.addMetric(new MetricNode(MetricType.SERVER_UPTIME, Capability.ALWAYS_ACTIVE, () -> ManagementFactory.getRuntimeMXBean().getUptime() / 1000.0f)); // Returns in milliseconds. Convert to seconds - + // Register group rootGroup.addMetric(_propertiesGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Server.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Server.java index 8f90747..0646f2c 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Server.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Server.java @@ -50,13 +50,14 @@ public class Server implements IMetricProvider { /** * Creates the instance for the server-related metrics provider + * * @param mcServer Minecraft server instance */ public Server(MinecraftServer mcServer) { _serverGroup = new MetricGroup(MetricType.SERVER, Capability.ALWAYS_ACTIVE); _mcServer = mcServer; } - + @Override public void register(MetricGroup rootGroup) throws IllegalArgumentException { @@ -64,11 +65,12 @@ public class Server implements IMetricProvider { new Properties(_mcServer).register(_serverGroup); new Players(_mcServer).register(_serverGroup); new Worlds(_mcServer).register(_serverGroup); - + // Register group rootGroup.addMetric(_serverGroup); } @Override - public void stop() {} + public void stop() { + } } diff --git a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Worlds.java b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Worlds.java index 2485dc9..9d9aba1 100644 --- a/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Worlds.java +++ b/mods/fabric/src/main/java/me/peteras17/beacon/fabric/metrics/Worlds.java @@ -41,8 +41,8 @@ import java.util.*; * Metric provider for world information * * @implNote This class is not to be considered to be a true, root metric - * provider. Its usage must be confined to Server class, found in - * the same package + * provider. Its usage must be confined to Server class, found in + * the same package */ class Worlds implements IMetricProvider { @@ -58,32 +58,32 @@ class Worlds implements IMetricProvider { /** * Creates the instance for the worlds metrics provider + * * @param mcServer Minecraft server instance */ public Worlds(MinecraftServer mcServer) { _mcServer = mcServer; _metricCollection = new MetricCollection(MetricType.WORLDS, Capability.FEAT_WORLDS_LIST, this::supply); } - + private WorldWeather getWeather(ServerWorld world) { - if(!world.isRaining()) { + if (!world.isRaining()) { return WorldWeather.CLEAR; - }else if(!world.isThundering()) { + } else if (!world.isThundering()) { return WorldWeather.RAINING; - }else { + } else { return WorldWeather.THUNDERSTORM; } } - private List supply() - { + private List supply() { List metricList = new LinkedList<>(); // A world (level) is composed of 1...n dimensions, but the API naming is weird // We need to find all dimensions of each world Map> worldDimensionsMap = new HashMap<>(); - + // Iterate through all the worlds, and create their metrics _mcServer.getWorlds().forEach(w -> { @@ -98,10 +98,10 @@ class Worlds implements IMetricProvider { worldDimensionsMap.get(worldName).add(w); }); - + // Now, iterate through all worlds and get their metrics, as well as their dimensions - for(Map.Entry> entry : worldDimensionsMap.entrySet()) { - + for (Map.Entry> entry : worldDimensionsMap.entrySet()) { + // First dimension will have same world information as other dimensions in the same world ServerWorld firstDimension = entry.getValue().getFirst(); @@ -123,15 +123,15 @@ class Worlds implements IMetricProvider { gamerules.put(key.getName(), firstDimension.getGameRules().getInt(key)); } }); - + // Iterate through all the dimensions MetricCollection dimensionsMetrics = new MetricCollection(MetricType.DIMENSIONS, Capability.FEAT_WORLDS_LIST, () -> { List metrics = new LinkedList<>(); - - for(ServerWorld dimension : entry.getValue()) { + + for (ServerWorld dimension : entry.getValue()) { metrics.add(new MetricNode(MetricType.WORLD_TYPE, Capability.FEAT_WORLDS_LIST, dimension.getDimensionEntry().getKey().get().getValue()::toString)); } - + return metrics; }); @@ -143,8 +143,8 @@ class Worlds implements IMetricProvider { worldMetrics.addMetric(new MetricNode(MetricType.WORLD_SPAWN_X, Capability.FEAT_WORLDS_LIST, firstDimension.getSpawnPos()::getX)); worldMetrics.addMetric(new MetricNode(MetricType.WORLD_SPAWN_Y, Capability.FEAT_WORLDS_LIST, firstDimension.getSpawnPos()::getY)); worldMetrics.addMetric(new MetricNode(MetricType.WORLD_SPAWN_Z, Capability.FEAT_WORLDS_LIST, firstDimension.getSpawnPos()::getZ)); - worldMetrics.addMetric(new MetricNode(MetricType.WORLD_DIFFICULTY, Capability.FEAT_WORLDS_LIST, ((ServerWorldProperties)firstDimension.getLevelProperties())::getDifficulty)); - worldMetrics.addMetric(new MetricNode(MetricType.WORLD_IS_HARDCORE, Capability.FEAT_WORLDS_LIST, ((ServerWorldProperties)firstDimension.getLevelProperties())::isHardcore)); + worldMetrics.addMetric(new MetricNode(MetricType.WORLD_DIFFICULTY, Capability.FEAT_WORLDS_LIST, ((ServerWorldProperties) firstDimension.getLevelProperties())::getDifficulty)); + worldMetrics.addMetric(new MetricNode(MetricType.WORLD_IS_HARDCORE, Capability.FEAT_WORLDS_LIST, ((ServerWorldProperties) firstDimension.getLevelProperties())::isHardcore)); worldMetrics.addMetric(new MetricMap(MetricType.GAME_RULES, Capability.FEAT_WORLDS_LIST, () -> gamerules)); worldMetrics.addMetric(dimensionsMetrics); metricList.add(worldMetrics); @@ -159,5 +159,6 @@ class Worlds implements IMetricProvider { } @Override - public void stop() {} + public void stop() { + } } diff --git a/scripts/versioner.py b/scripts/versioner.py index f0c9f8d..2e50ef2 100644 --- a/scripts/versioner.py +++ b/scripts/versioner.py @@ -21,7 +21,8 @@ FILE_EXTENSIONS = [ ".py", # Python files ".gradle.kts", # Common lib Gradle project "gradle.properties", # Minecraft server-side properties - ".html" # Web pages + ".html", # Web pages + ".md" # READMEs ] # List of ignored directories @@ -42,6 +43,7 @@ VERSION_PATTERNS = [ "=\"{}\"", "=\'{}'", "Version {}", + "version/{}/", "mod_version={}" ] -- GitLab From f944182efea4a839eddbd0c50d94cd43f77fcac5 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 13:16:19 +0200 Subject: [PATCH 121/139] (#42) Python loads environment variables from Dockerfile. Defaults to localhost (or Docker equivalent). --- scripts/Dockerfile | 8 ++++---- web/config.py | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/scripts/Dockerfile b/scripts/Dockerfile index 9fddafc..978801b 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -2,11 +2,11 @@ FROM python:3.11-slim # Environment variables -ARG IP_ADDRESS=127.0.0.1 -ARG PORT=25565 +ARG MINECRAFT_SERVER_HOST="host.docker.internal" +ARG MINECRAFT_SERVER_PORT=25566 -ENV SERVER_IP_ADDRESS=${IP_ADDRESS} -ENV SERVER_PORT=${PORT} +ENV MINECRAFT_SERVER_HOST=${MINECRAFT_SERVER_HOST} +ENV MINECRAFT_SERVER_PORT=${MINECRAFT_SERVER_PORT} # Set working directory WORKDIR /app diff --git a/web/config.py b/web/config.py index ca77574..fce21ec 100644 --- a/web/config.py +++ b/web/config.py @@ -2,12 +2,20 @@ from models.server import Server from routes.utils import ProtocolVersions, KeyExchangeProtocol, SymmetricProtocol, Capabilities from bitstring import BitArray import logging +import os logging.basicConfig(level=logging.DEBUG) log = logging.getLogger(__name__) -MINECRAFT_SERVER = Server("localhost", 25566, "Minecraft Server", "A Minecraft server") +MINECRAFT_SERVER = Server( + os.getenv('MINECRAFT_SERVER_HOST', 'localhost'), + int(os.getenv('MINECRAFT_SERVER_PORT', '25566')), + "Minecraft Server", + "A Minecraft Server" +) + +log.info(f"Configured Minecraft server at {MINECRAFT_SERVER.ip}:{MINECRAFT_SERVER.port}") class Config: PROTOCOL_VERSION = ProtocolVersions.LEGACY -- GitLab From 0806a77963fe554f054b75aa9fc928c7edc34655 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 13:35:39 +0200 Subject: [PATCH 122/139] (#20) Started the websocket connection upon starting the web server. Might change on future iterations. --- web/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/config.py b/web/config.py index ca77574..791b18b 100644 --- a/web/config.py +++ b/web/config.py @@ -8,6 +8,8 @@ logging.basicConfig(level=logging.DEBUG) log = logging.getLogger(__name__) MINECRAFT_SERVER = Server("localhost", 25566, "Minecraft Server", "A Minecraft server") +# Start the connection to the server immediately +MINECRAFT_SERVER.get_socket() class Config: PROTOCOL_VERSION = ProtocolVersions.LEGACY -- GitLab From 0067658a0f47190ed69d3e09dfc1bb99471ffb48 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 14:17:10 +0200 Subject: [PATCH 123/139] (#20) Added fetching for players and worlds. Logs are on the way, lost in traffic. --- web/templates/cards_list.html | 12 +-- web/templates/components/card.html | 13 ++++ web/templates/components/card_error.html | 1 + web/templates/dashboard.html | 99 +++++++++++++++++++++--- 4 files changed, 105 insertions(+), 20 deletions(-) create mode 100644 web/templates/components/card.html create mode 100644 web/templates/components/card_error.html diff --git a/web/templates/cards_list.html b/web/templates/cards_list.html index 6eddb88..e9d5786 100644 --- a/web/templates/cards_list.html +++ b/web/templates/cards_list.html @@ -1,17 +1,9 @@
            {% if metrics.status == "ok" and key in metrics.ROOT %} {% for obj in metrics.ROOT[key] %} -
            -
            -
              - {% for attr, value in obj.items() %} -
            • {{ attr }}: {{ value }}
            • - {% endfor %} -
            -
            -
            + {% include 'components/card.html' with context %} {% endfor %} {% else %} -

            Impossible de récupérer les métriques : {{ metrics.error }}

            + {% include 'components/card_error.html' with context %} {% endif %}
            diff --git a/web/templates/components/card.html b/web/templates/components/card.html new file mode 100644 index 0000000..48d9173 --- /dev/null +++ b/web/templates/components/card.html @@ -0,0 +1,13 @@ +
            +
            +
              + {% if obj %} + {% for attr, value in obj.items() %} +
            • {{ attr }}: {{ value }}
            • + {% endfor %} + {% else %} +
            • __ATTR__: __VALUE__
            • + {% endif %} +
            +
            +
            \ No newline at end of file diff --git a/web/templates/components/card_error.html b/web/templates/components/card_error.html new file mode 100644 index 0000000..c20d139 --- /dev/null +++ b/web/templates/components/card_error.html @@ -0,0 +1 @@ +

            Impossible de récupérer les métriques{% if metrics %} : {{ metrics.error }}{% endif %}

            \ No newline at end of file diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 8fbb284..f9c2a59 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -147,6 +147,9 @@ -- GitLab From f0345fde3d54f0a9614fa2e300a46750908450a5 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 14:25:03 +0200 Subject: [PATCH 124/139] (#20) Tries re-opening the websocket if no socket is currently open. --- web/models/server.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/models/server.py b/web/models/server.py index 16bbe93..d7a00df 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -71,6 +71,7 @@ class Server: dict: The server logs or an error message. """ if self.socket is None: + self.get_socket() return [], self.NO_SOCKET_ERROR # end if @@ -91,6 +92,7 @@ class Server: error: An error message if applicable. """ if self.socket is None: + self.get_socket() return {}, self.NO_SOCKET_ERROR # end if @@ -111,6 +113,7 @@ class Server: dict: The result of the command execution or an error message. """ if self.socket is None: + self.get_socket() return {"status": "error", "message": self.NO_SOCKET_ERROR} # end if -- GitLab From ca9b7eec531ca5d6f24d4addf41aa150da6ab510 Mon Sep 17 00:00:00 2001 From: Nicolas Junod Date: Fri, 5 Sep 2025 14:38:34 +0200 Subject: [PATCH 125/139] (#20) Added logs. Still has to wait a moment for it works like a charm. --- web/models/server.py | 13 ++++++++++--- web/routes/utils.py | 8 +++++--- web/templates/dashboard.html | 14 ++++++-------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/web/models/server.py b/web/models/server.py index d7a00df..bc3e270 100644 --- a/web/models/server.py +++ b/web/models/server.py @@ -22,6 +22,10 @@ class Server: self.jre_version = None ## OS self.os = None + + # Latest known data used for populating the dashboard template + self.metrics = {} + self.logs = [] # end def def check_status(self) -> bool: @@ -77,8 +81,10 @@ class Server: log_response = self.socket.get_log_response() if log_response: - logs = json.loads(log_response.decode('utf-8')) - return logs, None + logs = list(log_response) + logs = json.loads(json.dumps(logs)) + self.logs = logs + return self.logs, None else: return [], "No log response" # end if @@ -98,7 +104,8 @@ class Server: metric_response = self.socket.get_metric_response() if metric_response: - return json.loads(metric_response.decode('utf-8')), None + self.metrics = json.loads(metric_response) + return self.metrics, None else: return {}, "No metric response" # end if diff --git a/web/routes/utils.py b/web/routes/utils.py index 61ecc83..3ecfd95 100644 --- a/web/routes/utils.py +++ b/web/routes/utils.py @@ -1,3 +1,4 @@ +import collections from models.server import Server from enum import Enum from bitstring import BitArray @@ -16,6 +17,7 @@ def get_server_status(server: Server): def get_server_logs(server: Server): logs, error = server.get_logs() if error: + log.error(f"Error getting logs: {error}") return {"status": "error", "error": error} # end if @@ -102,7 +104,7 @@ class SocketConnection: self.metrics_response = None self.metric_lock = threading.Lock() self.ask_metrics_thread = None - self.log_response = None + self.log_response = collections.deque(maxlen=50) self.log_lock = threading.Lock() self.message_event = threading.Event() self.key_exchange_protocol = None @@ -334,7 +336,7 @@ class SocketConnection: data = self.get_length_prefixed_data(metrics) log.debug(f"Decoded metrics: {data}") with self.metric_lock: - self.metrics_response = data + self.metrics_response = data.decode('utf-8') # end with # end def @@ -349,7 +351,7 @@ class SocketConnection: data = self.get_length_prefixed_data(logs) log.debug(f"Decoded log: {data}") with self.log_lock: - self.log_response = data + self.log_response.append(data.decode('utf-8')) # end with # end def diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index f9c2a59..6eab804 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -84,6 +84,8 @@ + --> - - - - -