From c8239029e5f007aaadfbacf1fe4e7b56bcf43de7 Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Thu, 23 Nov 2023 08:22:16 +0100 Subject: [PATCH 1/5] User Interface - Improvements --- lizmap/www/assets/css/dataviz/dataviz.css | 43 ++++++++++++++--------- lizmap/www/assets/css/map.css | 29 +++++++++++---- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/lizmap/www/assets/css/dataviz/dataviz.css b/lizmap/www/assets/css/dataviz/dataviz.css index 6d9c70b9b1..0d097a68bd 100644 --- a/lizmap/www/assets/css/dataviz/dataviz.css +++ b/lizmap/www/assets/css/dataviz/dataviz.css @@ -18,7 +18,7 @@ Toolbar buttons */ #dataviz h3 .icon { - background-image: url(dataviz-icon-white.png); + background-image: url(dataviz-icon-dark.png); background-position: 0 0; } @@ -48,7 +48,7 @@ Toolbar buttons #nav-tab-dataviz-main > a{ background: none !important; border: none; - color: white; + color: var(--color-contrasted-text); margin-top: 10px; font-weight: bold; } @@ -64,9 +64,13 @@ Toolbar buttons /* DARK THEME */ +#dataviz-content.dark h3 .icon { + background-image: url(dataviz-icon-white.png); + background-position: 0 0; +} #dataviz-content.dark div.menu-content { background: rgb(74, 74, 74) !important; - color: white; + color: var(--color-contrasted-text); } #dataviz-content.dark h3 { font-weight: bold !important; @@ -75,7 +79,7 @@ DARK THEME #dataviz-content.dark g text.legendtext, #dataviz-content.dark g.xtick text, #dataviz-content.dark g.ytick text{ - fill: white !important; + fill: var(--color-contrasted-text) !important; } /* @@ -89,12 +93,12 @@ Diagram height, 450px by default*/ /* TABS AND GROUPS */ -/* Edition style */ + #dataviz ul.nav-tabs { - border-bottom: 1px solid gray; + border-bottom: 1px solid var(--color-contrasted-elements-light); } #dataviz .nav-tabs > li > a { - color: white; + color: var(--color-text-primary); padding: 5px; border: none; } @@ -106,9 +110,8 @@ TABS AND GROUPS #dataviz .nav-tabs > li > a:focus { background: none; border: none; - /* border-bottom: 3px solid #0094d6; */ - border-bottom: 3px solid white; - color: white; + border-bottom: 3px solid var(--color-contrasted-elements); + color: var(--color-text-primary); cursor: pointer; } @@ -117,32 +120,38 @@ TABS AND GROUPS #dataviz .nav-tabs > li.active > a:focus { background: none; border: none; - border-bottom: 3px solid white; - color: white; + border-bottom: 3px solid var(--color-contrasted-elements); + color: var(--color-text-primary); cursor: auto; } +/* In bottom-dock, do not use a thick border bottom */ +#bottom-dock #nav-tab-dataviz-main > a { + border: none; +} #dataviz div.tab-pane { - border-left: 1px solid gray; - border-right: 1px solid gray; - border-bottom: 1px solid gray; + border-left: 1px solid var(--color-contrasted-elements-light); + border-right: 1px solid var(--color-contrasted-elements-light); + border-bottom: 1px solid var(--color-contrasted-elements-light); padding: 5px; } #dataviz legend { - color: white; + color: var(--color-text-primary); border-bottom: none; padding: 5px; width: unset; max-width: 100%; margin-bottom: 0px; + font-weight: normal !important; + font-size: 1em; } #dataviz fieldset { padding: 10px; padding-top: 0px; margin: 0px 5px; - border: 1px solid lightgray; + border: 1px solid var(--color-contrasted-elements); border-radius: 5px; background: rgba(255, 255, 255, 0.2); } diff --git a/lizmap/www/assets/css/map.css b/lizmap/www/assets/css/map.css index 13ebfd17b1..be2cf73217 100644 --- a/lizmap/www/assets/css/map.css +++ b/lizmap/www/assets/css/map.css @@ -368,11 +368,15 @@ ul.nav.nav-tabs { right:5px; width: 32px; height: 32px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-left-square' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm11.5 5.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5z'/%3E%3C/svg%3E"); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='black' class='bi bi-arrow-left-square' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm11.5 5.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; } +#dock-close:hover { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-arrow-left-square' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm11.5 5.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5z'/%3E%3C/svg%3E"); +} + #right-dock div.tabbable { height: 100%; margin-top: 5px; @@ -512,14 +516,20 @@ SubDock #bottom-dock-window-buttons { display:none; - position:absolute; + position:fixed; bottom:0px; padding:2px; } #bottom-dock.visible #bottom-dock-window-buttons { display:block; } - +#bottom-dock.half-transparent { + opacity: 1; + height: 48%; +} +#bottom-dock.half-transparent #bottom-dock-window-buttons { + display: block; +} #bottom-dock-tabs { display:none; @@ -1494,6 +1504,7 @@ lizmap-print .flex { #switcher-layers-actions { background-color: inherit; + margin-top: 5px; margin-bottom: 1px; padding-right: 10px; text-align: right; @@ -2295,9 +2306,9 @@ lizmap-mouse-position > div.coords-unit > select{ #edition-form-container h3 { color: black; - background-color: lightgrey; + background-color: transparent; line-height: 20px; - font-size: 1em; + font-size: 1.2em; padding: 1px 5px; margin-bottom: 4px; } @@ -2930,6 +2941,7 @@ lizmap-reverse-geom svg{ .btn-print-launch.spinner::after { right: 5px; } + /* lizmap-feature-toolbar */ lizmap-feature-toolbar button.btn:hover, .attribute-layer-action-bar button.btn:not(.dropdown-toggle):hover{ @@ -3173,4 +3185,9 @@ lizmap-treeview .symbols img.legend { lizmap-treeview img.legend[src="data:image/png;base64, "]{ visibility: hidden; -} \ No newline at end of file +} + +/* CKEDITOR adaptations */ +.ck.ck-balloon-panel.ck-balloon-panel_visible { + z-index: 9999; +} From 615a324fb633721c2bf491c1ba796b05a30c20f9 Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Thu, 23 Nov 2023 18:01:15 +0100 Subject: [PATCH 2/5] Attribute table - Allow to display popups for non-spatial layer & improve popup table style --- assets/src/legacy/attributeTable.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/assets/src/legacy/attributeTable.js b/assets/src/legacy/attributeTable.js index 95a15bce5d..24399c73b5 100644 --- a/assets/src/legacy/attributeTable.js +++ b/assets/src/legacy/attributeTable.js @@ -484,7 +484,8 @@ var lizAttributeTable = function() { var canPopup = false if( config.layers[lname] && config.layers[lname]['popup'] == 'True' - && config.layers[lname]['geometryType'] != 'none' + // We should NOT deactivate popup for non-spatial layers, as it can be very useful + // && config.layers[lname]['geometryType'] != 'none' && config.layers[lname]['geometryType'] != 'unknown' ){ canPopup = true; @@ -666,6 +667,7 @@ var lizAttributeTable = function() { } // Bind click on detail button + // It just toggles the right panel visibility if( canPopup ){ $('#attribute-layer-'+ cleanName + ' button.btn-detail-attributeTable') .click(function(){ @@ -1685,6 +1687,11 @@ var lizAttributeTable = function() { }; } + /** + * + * @param {string} aName The layer name + * @param {string} aTable The HTML table selector + */ function bindTableLineClick(aName, aTable){ $(aTable +' tr').click(function() { @@ -1711,6 +1718,8 @@ var lizAttributeTable = function() { lizMap.getFeaturePopupContent( aName, feat, function(data){ $('#attribute-table-panel-' + parentLayerCleanName ).html(data); + // Add the missing Bootstrap classes + $('#attribute-table-panel-' + parentLayerCleanName + ' table').addClass('table table-condensed table-striped table-bordered'); // Trigger event lizMap.events.triggerEvent('lizmappopupdisplayed_inattributetable' From 7dce6d145f633c207a97c48cc2b7ccca43d16bd7 Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Fri, 24 Nov 2023 16:45:57 +0100 Subject: [PATCH 3/5] User interface - Implement a brand new light default theme --- lizmap/www/assets/css/dataviz/dataviz.css | 38 +- lizmap/www/assets/css/map.css | 22 +- lizmap/www/themes/default/css/img/logo.png | Bin 3215 -> 50705 bytes lizmap/www/themes/default/css/main.css | 125 ++++- lizmap/www/themes/default/css/map.css | 502 ++++++++++++++++++++- 5 files changed, 639 insertions(+), 48 deletions(-) diff --git a/lizmap/www/assets/css/dataviz/dataviz.css b/lizmap/www/assets/css/dataviz/dataviz.css index 0d097a68bd..5a8222c941 100644 --- a/lizmap/www/assets/css/dataviz/dataviz.css +++ b/lizmap/www/assets/css/dataviz/dataviz.css @@ -37,7 +37,7 @@ Toolbar buttons } #dataviz-main.bottom-content div.menu-content{ - background-color: #F0F0F0 !important; + background-color: var(--color-background-primary-content) !important; border:none !important; } @@ -45,12 +45,13 @@ Toolbar buttons padding: 5px; font-size: 0.8em; } +/* Title "Dataviz" of the bottom dock */ #nav-tab-dataviz-main > a{ background: none !important; border: none; - color: var(--color-contrasted-text); + color: var(--color-text-primary); margin-top: 10px; - font-weight: bold; + font-weight: 500; } #dataviz-content > h3{ margin-left:0px; @@ -93,7 +94,6 @@ Diagram height, 450px by default*/ /* TABS AND GROUPS */ - #dataviz ul.nav-tabs { border-bottom: 1px solid var(--color-contrasted-elements-light); } @@ -155,3 +155,33 @@ TABS AND GROUPS border-radius: 5px; background: rgba(255, 255, 255, 0.2); } + +/* Dataviz in bottom-dock */ +#bottom-dock #dataviz ul.nav-tabs { + border: none; +} +#bottom-dock div.dataviz_plot_container, +#right-dock div.dataviz_plot_container +{ + border: 1px solid lightgray; + margin-top: 10px; +} + +#bottom-dock div.dataviz_plot_container h3, +#right-dock div.dataviz_plot_container h3 +{ + margin-left: 0px !important; + border-bottom: 1px solid lightgray; +} +#bottom-dock #dataviz-content.light span.icon { + background-image: url("dataviz-icon-dark.png"); +} + + +/* Some plotly adaptations */ +/* deactivated because it moves the plotly toolbar */ +.js-plotly-plot .plotly +/* ,.js-plotly-plot .plotly div */ +{ + margin: 0 auto; +} diff --git a/lizmap/www/assets/css/map.css b/lizmap/www/assets/css/map.css index be2cf73217..9165ae7478 100644 --- a/lizmap/www/assets/css/map.css +++ b/lizmap/www/assets/css/map.css @@ -85,10 +85,6 @@ button.btn-primary:hover > [class*=" icon-"] { display:none; } -#headermenu .dropdown-menu > li > a{ - color:white; -} - /* mapmenu */ #mapmenu { position:absolute; @@ -2120,7 +2116,7 @@ lizmap-mouse-position > div.coords-unit > select{ #map-content .lizmapPopupContent h4, #popupcontent .lizmapPopupContent h4{ margin: 0px; - color : white !important; + color : white; font-size: 1em; padding: 2px; padding-left: 5px; @@ -2364,7 +2360,6 @@ lizmap-mouse-position > div.coords-unit > select{ .edition-tabs .nav-pills > .active > a, .edition-tabs .nav-pills > .active > a:hover, .edition-tabs .nav-pills > .active > a:focus{ background-color: #93C01F; - background-image: linear-gradient(to bottom, #9BC144, #93C01F); color: white; } @@ -2469,14 +2464,15 @@ div.tooltip { border: 1px solid darkgray; border-bottom-color: transparent; } +/* Remove border & padding */ #edition div.tab-content { - border: 1px solid lightgrey; - padding: 10px; + /* border: 1px solid lightgrey; + padding: 10px; */ } #edition div.jforms-table-group{ - background-color: lightgrey; - padding: 10px 0px; - border-radius: 10px; + /* background-color: lightgrey; */ + padding: 5px 0px; + /* border-radius: 10px; */ } #edition-point-coord-form, @@ -3154,6 +3150,10 @@ lizmap-treeview .icon-remove-sign { lizmap-treeview .icon-info-sign { visibility: hidden; margin-left: auto; + /* Make it centered vertically & horizontally */ + background-origin: content-box; + border: 1px solid gray; + border-radius: 5px; } lizmap-treeview .node:hover .icon-info-sign { diff --git a/lizmap/www/themes/default/css/img/logo.png b/lizmap/www/themes/default/css/img/logo.png index 8e31fc74f7d64abdfab770231ab8ac9c5e68b718..661aa6d2a82a6d648bed6f65b8a129176a2eceb7 100644 GIT binary patch literal 50705 zcmZ5|30O^E_y0)3HtPK}j zY&jkMZ`DfphSHNM4ga^?QRVpARq)SkmH9&qX%VFe_X^ypYyMsW(D~s<$q4HmvRSrhkQQ%y!ooti_*8PDq0u55UQ-XISYog<1C6E zxhV7HS+HfV&7Ktco{;e5_uG#$8}nw*in4t#DRY**Q%9AuKE1->$E!u=0XmBmx5&NE zihT=nV>i`TNxh$KspyGHG)|cr>{P|Dw>g*6nm3hQZ|W`5-4#shSnBlY&Pmc2pLU}Z z^>;4OBfXEARqr}#82IGLlMF6NW4EDCi*vb-{g*qIZ19f@OX2J^DGUo4>GWd5uz<6n zT+Uu9(fL{;PLhimGh8l1&iRckPAv|d9fkHrvx-aoJ-*r^Jkg!TIoE#nY+l@qVPP>; zW^CWZwAB29&-n$-HV4CPj`Rr@lw2AefBm6Er|vyJ7O=Te0ps7y>61UR)V_mH%xdh^ zM|QfHlLAKaM^A6OczvJ!*ocosWcH|fAiEgzsg=vH=OL?;9J7V_d>a zM=Y0NAGM~Ll-NY3`8|#uJ60pX>9Ix$D`&SLVCE-z%8Yz$avsTdIS64){B$&o!-(kg zqmszW8Mz0Yg!tuGvat9YDKJr1t-|8M)7dc{^Xt4Wu+Hq(%(^g=ZQ3F$HjqGNCN0mO zk0{i6{ms&vebvQl*G8LrdpkdV{1_g+p9v$Jgte`9a81*rc`8yS8uC__g!6X1PE@cV|2t$PTG{0>$zB3>FBS%8+r{Z4-|OI-@4#NZ@9&rA%y)Bj zMU0P34t#yUS*2*d$W;7Wdzz_u%`T2L?LNK6a|z*DVl$X~)30z3pB1K*!&tyh*arQC zlFT-T+=BK@Ly}GQjlo93?$ZlKfFW~q$7Q%9=a^4YE}G3{2Gec)b=$+|jEAl}Q`ZmJ zh%Uj;*V{7nhhZ-izTU_;kv&3zNDFwah|OMs5oR$2cS8w#=|YwOo`glL zD^?Vq%`SkC5hF`0TFWiz6dU*K*$(WG`O1{!4R=MTry5v33OkYf}01 zNnHv)i7CS;U0AX@FMLWm4xgUGo$4##lYqz~rp|3az`W0iaO73>j!#=>%D(Ah=6_%E z%ii7HeV-F2HoFHV-MG`QJNZQXJ_wM%)^#lmx8~2h`)XOkbK%7-a)3l4m6<>1kY9c! z3kJxJrKmzy@%<)%g?`mfS(SJwujSLiE`S^$ISM7{tM7GO+j=_%<;yapqplGR&~0 zyu7?6H#c`|Zf>r^%gamp2smjgIO%Bc35y(XN7jXRH=;8ztf`M&c)L@U*!LwG-OkD- z@nUTR3n>+Dl|dUW7F>BPGtu(fhjm!_{SO~Lm^nH+cI&z^jcc^91nk$n0Zj6Cc3Dqo zIy=AcF1QyQVu$$RJVvU~Hyn$Ih~RZB;o>L2cw0Fk&-}XWmi&8}5*c?V8Vm6zxS#YL zg1`KwN_3qOtV1knaWZvg79&;R%$f6xTb30Q(}XDnI=Y#$>LMm!9nV>`i6zjazdA)XKdfLy`pB>X*9e(gCEz*n+XEOCL z1`?fj60p<@JQJ9@qy<6g#2*(Y$;-$3*cIhBIkFr`M31?=OQX(p#~Y?SR0ApuR9Pur=b!fyR3^%vgYvprD|oKab2lx8b(jFxbv?l@^xNlP4f~ zGH@&>CzmkEtgm1}DBcHD^Yh10w!at*8)A<#LYi6GF-gOmYrqbq_d3%|;>rMw;h`a3 zJW*RRVdc+Hg&!o^gIB4)N_F)|o$UCVjua1$(a4I5jo3P)(&$oAC^j zfyH^Hvv=*{@F|JB@a|xTUA7HEaZd#ve=g%avnc!;*l`k0e)(rhPW=gS{#wK`@XxQh zwpQ~#%xMmDvUh!yz?Am+K7RZ{-l3;FwW<)$VxtNY)MeO?&aSSmG(k1LwQ|3hMvdY2 z&RxMLh*P(S4PHhVX|nmf)z=w6Ub%z6SJ(ucA=92e*3S|GJ1hg2x=Z+`Rr z_mz>W*}gKxOqf#Qy8mw{Mzvw?n9ctS#sK@lrj(^Bi2k%X87%o|3(Jl`W*!XN@r0RA zsX>%Z`h1tn|F#gGi-m2og{4kE07 zRH5*)dySWhi-*TjbgY_xhuL#>j3hqS*00cXwUT{Rg*l;4I{~0q&I%i|3I_ArQ_X@Y zbvzqqR@u|S@>ce%8-!LG zUcC6Ty6!y5764y`0AFYv_2T*S9}s#N7FUh<;YJT(>G~|vkSdl;4UkR5H9*WKH4Q$k zzU+7vybPK!VV)EW${^&eZjx{9moIGuSr!a4$Lak4#0!5!5V2TF43sKFdir#J$Pp@K4P0A45mdW> zYL2N=p*#)pGL24W&t!-rta!Zr*5Et#FV)q)4{Dh1O{CQ^k@lR3*XfLEBhJ`7QULt< zAvaTiKsdk!6mg|3LUjHIZ-;9?-HNN#D3taE0*Tn-<9 z0B7{ndT$bD`!+ar+@>&q0MD{OP*Bi!_iC6h?B34{l09W*M_4djO(>*XI$ZlF_V3?6 z^8l^yUIv6Ax3RoqU$RE1M1}dKk$9k}8iZOR8)T zF+drqF=zTv_a@)c=Zt%{ZrgTi&Wp>q*&WxmmQ1=K>FoOwj8iljLKXH;Jqs88UWBEa zbX1E2nsxo)rWlm&W@ZT1s4#^bi#3=n(55_OaB^lz-KW4Qi>11OVzO`ID!Qpt56Cu5 z>MrwFZ0PLt5P_J3@af&(!Xl~%5=`^Oq3irkY``?_sKiu2nGsxLM_}j0^q<524Ci$F zB|?10E8^f+FM?#zHu^hkzf0j*DR)W%`VUA6ao-9Bb%7CxVJxXa&ON}mgX$SHrT{dM z`lFzmWxyhxUFS0$NJ2^2wT!)?ESwmytfL=RsWR$Ei1UYsQMs^k<;u%wGckex3k1V3 zX*&N0D6(t+;eh`=!oe$u>5ef^b6CvkbHFj05wcS!DG(D_C^zzN*9T7`>L&m^=Oyf? zm6sv@g{+Y1?}c`I)E&n*o)hG6Pg6A|jPjfmocOv5VbA#gGOXqwRe^PVvh7Ik&C{!W zkvrHBuhDPx+sizyly$W>=w~{h*fk2+P5tTAVAE1BC>ebUPq7>ig|u7*0FqChEqRIn z%zxF7pt$((6K?FCt9+u8Z;$Y*0fEPa@!Y-qyKD_W$$?+WlTx^H3mN&qT^sB?{_da{Xv$;@&tyJ%ot+cQuxo$z3ehflW-Nh8Wo8-o{H*w(@OFH!rS$dd?25t5{9$#_w;#v< zk^m^6G6sE24!@=V^m1fTY&Q)~Rn*DwYXlKfmm!Q5*F^098>d)Qt$q9|M|p5tk?U2W26!~aGpyt(x zm~W$e0Ye?ARLD67naKh77=r!zO#Rva2}`SAN-T!){~yg_uGgyo4DwK;Zk1(;D=AZ9 zAsqns+nAb~9z%3dcOC}>EE51>6;1W@Pt~8y{8LI|J@v28Bu2i5oD%J*v`vKGwFdRS zVgUU71%IOwu7CvUI)ZfMod~(jL@;jkUU~UKwVy0{eM&5Dq>>nWyw-;-h>c`geN7la zV&sq$oBDPOLIGpAIS%*H4{yglT5zD}2ll}8mQBexc{A^B`*M)*3x!s+f zgU>IIbJ)#MQ%0jILusQ3o&Q!M1;+vI!D~Y>rhO2xClY^P0X{)Bo|}O1P|oH>5TTdv zMc7fA7MU-XgDY|P6$vkbYXVi!1vjK6aa1q`hIoVzp~&Ih^CaEBO=}X+*yI1vzd(EX z2`j$+^E$Ingew*HX(FeR;ELAt6DxED;}o4QXSN`O#iP-?zzXw-bpMk&Xo%5^@F^_a z|BE*MNgF-|!!`WVwM_T~lYPM_yY>z~`NB2)Q|j3@is?sN)P9RX)MENz@%b@Gpr$gg zJDNk&tz}30;d}n}3(!)!bLS4KiB&A`^zLaxr9-{bwR`(7m)Icj07QtzCEhVVdSwe^_|h#U{?47Nu0zU zi`>g^g;Pj|W$j`Q;_V}rci3a7f={6SoUM;lgRT(Vgh^y0vf*&w5hi84G4X#QyzA3r zBrS$>`)_e_a(1kZSRrAV?tc{Dk${!0Syu;d^#Rh9BmH&qYhEpO6TDh3>%VFp&r&t`d)gZpQKu;a2M5> zK*KdB4{Wo+Gd;;h3St1-`cTy}X`B0o7XSY)CiUh_H5w3}g@^C&Rnvko7*J$ia=g1 zQHFU=18x-Y9>~_R$Dx<7w`_?(&U%@?Tm!0LViY#jfGax=zr-U_4z^j z7Ke7Rl!Eaxa8+%T2P(v%-8XkJ-QN%8oFdxyls<+@r%@Ztd9>>TxlX3s-`|T(N#PHf zSpK=e8X8cLS%AXO^XIsr?SzQ>PfG#xTB`d3t>^``rdT69sb{9semf8SxPj{-rH*!o zs@*QNczZxOOO&pE?tgeRV0n{?2XX477pw4*e*S#JZj0}e(DSMOn|7h|gHrB||Kk<& zrxgmis=!7HDCgi@qtvh#PBz@o8t~?irNHeVB7PL}e?X!B2DRH**!if)$~k=sX08D> zGGBA9qY#c7^>pWaBUHV>&dCeW_4k4>S+{oWmz)AboqA8N-7Cb1s>=6NL187-)*xj%Ya$Bzl{#Gf!xP@Oy-*yMhznVc1MAx($8;na{Bsr zRFp1-?0&%5^TStwN_ePU7s9CBZw{4%LDIm!B9CHF4y=5y;loq7{`FM zLiC5IsFDQFFF^?lYfU|Xm`QP_%@K6Q`p63M3v@o{Q5AB8VVp*jb!OvtYbh4#y)B_G z|3k;AZXUA_JZ4+ICTep3u1M3o$EI|su&~e!HasVt%b(AeOq?~RY!UzP)ueOl4HuUO zeoPqexz3#HB@1n1CBC=_$yNtl#LVXz|!WI|ZpAuyfs8s?ZC?hC2 zyB0}y1`%bxA++QA0XJXv^5x6JlF%_Y(*JS-E_X+uBwPM~R_gl{&TZtJ*kmd3E{Ru;-@bjz!l6srL(8_6!HZI!w+a>}r6{MO-X1HST~?LRiF47^s?-t} z+P^G|T|9N_)KwH6(T=HkLBy?%t*vs6;AsZBc6>sm03y9Q8GZRm^5b2wKucICJ3gd( z2$0{v0-35aZGmf&Cskk2o#?md&Lg4I*OO{0=mZ}jAL2pZh1`DRYd+OH5>Xj`Z zJ@9t{hz+v#vM_oA6z)xSMMS7Z;4c3Bw-X7W>5>+2N1&v_B1|Ksq1_~^14Vi3kn?WF zJp@42^$2MTxPZ#c+xGca#Ti!=5sZM3_BpX7N2W{eWQ-z!Hbe{$gs$Hrbe&?F1dP32 zhuD3r$@Pp%OX#&mMB}77^mOt>f@iwqPsWqSyTC{h`o=H#69GG>ZnewWe-x!}1fNI@ z=EEpTfd?QM8eN~BY6;b146`G>Cfv4?yc{7jF(Dy~0o+mLw-Z9JvWp;2-arEjGBiA1 z{J;uM?~|a>O5vH8urT@f%{ucsW8j8Ad(;f#V~Bj8!0vV1jk zokJD*ku}fXLqU=}A>@-TDS$eg87+p~jEOQ|O;0}Ngf4KM%*_Ysl1!+o`;S<{Sqd!so19@?q ztQs7X>pqJ`EP)Z;&1AKf0$$fd2-*Y@#Za5YgoE1}R z$zJ9rfQ%18qTt=xU7x^3chc>{(9!EZoGU&5j>rTx^kf=Nw`8vc9>c$3?Bn}zfF**_ zpR3=kZ#ezSm`a>yZ{Iq`Fxe`BY7m1?WQPXo4>gou=cR@rAEpg7<3HWI=GB-dq^Fp=ny`4JKyYEOMzZUL4=SUmo|4yOr2RyEW4x`bFK{zd!Keg7Zy@D$pI71xSg}|M^;A}sI40LKf8k?2?rOW-A zC!Ce!BrPCYVN~>@<_gyHWPqHMNTsg=N1nTV>wOve@(zlvf_9f1K}5obv#2Cex{2CG zTsXf3o^Ekj0o&cmxU%orF#Sp;S&Rb7cR!A|fVHT~Iyqz1BCNuq{s!DE|A*N4-GXlpF`!F zak=_=nh%#GnNwC{cQarxV0Lp5 z*tn?I2j6yu1bT-?3s=~0v{UN)j~Ff;YvGzx!5<78AbUKer`Iw@rETrIr8ZopV6q%8 zk|y`J&-fXJ5*c=oI2bT_N>bbk=C-Lnw*X($Z?_e<9yCBU6H}U%* z==HefNrqZPy+(?UM6H|%(37YlLoVi#Mb=yEk9|hd z=$#h)q!CB~B0Z3{32fmc4hMF`y`77J8}8dek@vE64ZOrR2u{MX~bDnd)5 z(@q8x&+`@`{FwHl6Mt_!F9!#`PEYyq^=a-wIBti8`80EY{3YoBTf@MU%v1I7?RlGv z2nG5?zTNLPZojMs^6`@K62&iJ~xrNT91xl3%{Zrju{kw@p<~Z=_ z2z^Fv!618OHKr#f_R0LUBt3nc8~k-`H=AOXW_^>uk$e}mBOX(Rlr2p?U7rN&e-f4s z!FsRE41Wub>(N7R>6M`xzswmD_u#~d?Lsc&L}_krrkMRGi{rBd_{ z?2-P9-Ld{Ft4AY74hL7(`pqLbWgcyL;szdT|H8hC%f@wX z8Nj%P8Gy$uoD z=@bmiKGaEA$KDxH8Iv;Am3-wBugg8Z4TU!+Urib96R6fKi%+K}LC(hyAyA^!eHxSE z$oHd2@yASNN_^I?I){?mmemU0P(pSuMhMeeG4W63FQA3ANsrBvAC#q()y$~X?OK} zXlpZkKQhAhz%OlwrU%jTJ+w#b_QpU(f9mS_H3Xq|pDw=^qx1BEed%vu8I%g)$W`vz zQj*4pZylh0wKQ4FYjzv}BMG76CE5ITB=DS-{I@50>9rR@X7VR-5F>7+wx7One9FXq z)RV$ZpLyVSkr;YXqua^kO(hw<&WYdX!?@8eQg-ncWsAmikDjzze$ixn-Ch{dwUT@; zq?CONY;)}4x$o7F$ZW_fQ}*rKVClSWH+NXe(`_kR8eJ;9{%!a5-8yG*etiA<^;MjM z-o}-=*gv!*&s|nEdGOeu@Njy#Q1Zuozvg|vbaTbo4-?+AWc|*ak_`vlLY}8fUM0Zk zRI!??+syq}7vA0Xd&1r6K3V^bi`d!RwyE8*wlLZZ?$$#w2kHaj06N_eKg(ZI2H&EP zTQoP{@mxAbs>#%IL42NiNc^Z&F5h8KVDa(vkOe zo=qdxdsrVlQuYu5Z7z;#aM6mU1fwVSbWBMfWA^lnHtVSjEgBC#%SF`YP?bD+O0~1O zNYQESV1AD-YA=IgQ|Zsy<}Ha*B9ak!1HIS*!USHLl%S1wF79!9Y=KsH)Xg583~#O6 zIN)?Y>B($*3cQlQ9s#qN%Al?N;m}>SQME#Q;?kk2+>?<-D|cj~kqdS}PFUrW-UXC)*Y<&6m8zTbwc z9qBu_&0gNuvG$%865v)ht%sqDV0av|f*m?jK!Q*IQKM%*2a$=#Haj-auZRy!kO#=u z!$Fx!*+cR~L}JXe;(`rjOTa3q?&ys3PrX1&1!7)I=|U!7+h+N>&zk@`RVV6a0A9i| zlngTKh!lD`7Z=ybJL)Z>WtAm>9qgd&>T+xk&gAy0~4dkQsp{bcWqKN;ZUt-cOP}zPFAdSU!pT; zapexbbbIf>#Sh@7&qkb9&sim7o|9cJ8aa?XWkrNIM`J?Gwoev-C_Bse_sCND=n^x8In8}9? zM)=~B-$tCX_t+x4a>s?hk&`>JppOl9cg6C!+nT)ZE%g_rEi2cl=K}dEGk0=(#{l;~ z+TtHWDkyGR&l{I#&+*rIK!OwpBM@015Q?dDZv?rdc5{yG z@!fQV4YI}bov!_$FZdtDyh0?DLhv}e;ins$=o9heTOk^^DNAZd2Dfl{r4Cz-`nycH(9~_ud z8U9MDV~4vEV_Vp5XV0E}r+cKVJYJlWh(7&cS=bXvk6y7b*QNEcSD~_Pz0qXUl$n}3 zdYK~bvr(!Ay}5D35(dd>L)!t{yLWHN$qw^0%54bS&u&pT3FDExRy{LrUCPb`Tt4D2 zK%v6S2Zb;4Fxppb2T>me9kH|Xt>qPb6eIFqZsDJT0%W^4`!3zF$k|AXR z4dhr>?mIWh3mZK-Kj9Je%!PLU!3b0^`!1qt9HNvh!c6;8B{?qhC4`#0{K8a3{Zq}u z(G*r(95IrF>Ov@Co_}xW>*)6U*gN(>ZKN;iIw`>q(`(mALQTo>CuoE((RQVz>rWDG zM)%hbOApMRs;}Oe6e*y)J6sb} zJO&$KD;!Z5AnxtBPz+V0;gujvqxgW($~80~D%7W9ZETT7k((V=pPY0l;+8$ep*jK^ z=_T2=nIXUKoIG)&XmbHI<0B~Gd+%>vmlhQZaSbks89^GSqQY`x#>U7@PvL+A$6E~7 z8Bg!*^#qrXCnA6vbk1MCyUdl4uyLYYw%N{deER4Zx zQvm|+vw+{da_jog_ntg(eUHkF(T7R}u>!c7_#U`&VXE6-xKCdt(jpTOZjR4%Z_}-( zQu-}iv?Wj=0qkhQ+OK_D=N*<+nIX=F=K2|-unP5Rp^+>0t(IMP+KbN$Bz*b^N?M5B z*2dU!5mAs{Vskk9#D&JcT4mZ;nK5y(wd{N|`AU^9LE}r@xkx02o#5@wFPuaqSl(Gi zt>f)Bdf+kN{l&d8KnQ9*)LnTP1)F1zC)sTBT=nOIh!D%aiFBWw1)fMJYL|$YbU&As zu^(kIo=>dXOA>jMfZCWBde`YpyQVw(*hW zoYr>ji%y^`)DIB!p)-j3-=~)h0fMc3&7-eDA>4|UWE$6+Y|mdTJ^IeuV@}M(dnLJL zEiZGH0P3I=%=?f!bH2!FmJq7M}$X-Bc0VTF~PZc-80Z9U` zdvboR9GTep8M4C{F5IOIdM_Ak^;g(N9G-|`2UG8U2_@>@WP-EeYmg5%Nf`yZfIyBZ zyggFo1YoJkN6uZSC|7?E2fJ%|SLEDX&z;P>oBnnbh@9lyZyQ=f{q2mT(OX zjX{tR`hDAFwoK7)ak7Q$NEwE=fQEZ&2b-lj(63FPYW?~;3OL=o48=uzd%O4f=pB!c z7;w;L#1U<3@JQLsCKvL=*>8)99_wI*DXs!)=!%Kr3Bb zK+hL&5LpO(-jQyn<8k z4{0(SGHm1PDENU1hHZ=n`(D*Qdx&a5wV%YkzCMRD2hpbF70{s++su1&EJ~#e(^X2O zrJcjYB06yYz6cdb@ltKa0*f9o$|c5wI>>gYMPQ2x%l4B;NhFW&B3Czl%{h|XcF;xa z*N}vWGpBk)W#;ZxrgMRY_)F zWBobLm47s7;FxUBFg>QdAl=;1U@O29^dx;X-S#J(YD>h~+h)Ic^X65lkgJWrXXu-s z*)-X1AfNpz?*#Y$u$+bI+6(1O7I9iz&v$%M5Coa^oLaIlOLj;|->VdpC(mD|Tpen-`KC~QU|-GG z$m&w&7J`t`$^c=nXQXPI=ENl6B8r)9cFxoaqLqwbGThueNr_e6ESvrQKv_t#;PFtV z9&Le;<~}K^qcOB8*KZh$|Iz6WuWD^;-K{g!VoN1Z#WpiCw;!G^nP=}Tw0Fe z)8lzT?nGAYhK*S&KYDL(JZOJ0DjB+O>e*M5ILq`FX(?uN{R*K@qJ~N?E-r8Gk{>>- z4kw7^v7HHbVIBP0`~CV%`^*lbm7*adU#O4VjGA3Rh-)ooy}NL@r_AHVsOecaX!Wd%ydkmu?(^L-a{JShlB!hvmhCDXs*2OJu^D7(ZEY1pKdLxHXsR`6 zPRsy5Rhn2>^gdKLJtmS>m$d%TP*K%;UoGKNb!vOV;5~cc8EVVKl$)WPq*=ixp_8v{ zuU=g+RY*n$F!42g?H{cT@()B>+iT{nrG(ZB*nyeA+<0 znvXSo-^r9$v*zUF-Dv+w%dEbb|C(-9w3)EGvx+97>wmRlo-BGM;Y)2<=ETP7YFgcc z7frD3nCF4FhE|N5oad}Vs$83;Eh>ZN@cRu-&;jC!^DZvgFH@A36NB!$MYM)aTrI$D z=yHq5cP_c_7a3QjzCxK0zdgKKqJWxS<>21_!ex3j&?VNzJJj+P9)&#wBSh!Q>m3Nw zz1PE6!L^`3_>JIa94k-O01hrq^p(LBK{4!fhGq6vR#xx|=B!(TMVyLBUG}Z1!sDUK z1a&4anvmHzAzzbp8lF`gB`!RAbv|2kK&LYDrN2%{^<^$UZfUzq5-DL{Q)|&?VsS=h zLYvl!>8+uyQL0muDZddJ@-F5K!PJpQhDPdo zsKIX4)ZWf(1EiRX^0P!S0-3JNpjmQebGdqYzv{VshU7?pHsCq-IYt_iQ3_V)MD~}$8=;R3w4hEL-)^K~= zv`P{l>U|?0zIk%95{ihSBolDA$eMTW-Vt8xxv0{spS(9ARnrnVsP~n8xbJQwwLpnj zYUVqmZQ*>x1LU@EK~ADt2TGr3`-)PlE@!ZojW58xTDHrHUIG-)Xx|%w&fhEVuZMD#>W8n(Xw~X2VX&S3MuA$-R)|b_a#$HY9`c*1>T<-VZd1K<^WquFp z9j(qgbv#t3aXE3%VY7;MC*+j?>$~KSl;-C3owKE#t7)cNN(1wKcToYyZJ!$(8`=G) z6Oc7)!J7KCG=YQm?&7*BWa$B&mpeEPQ}-j~uk?D;I-oP)6Qq|Z*On6l2(eaq+}eNdRASs2Rqr(Idqw%d1UhUIafTJ=X5X^= zCVnBvX{%P&xI(EIiq)6TR@2t>1At+|jC%2bEq{k8IRV44OQ!fiMh5fFZn2tZFPEi@ z_rqu}SHVMSbu3;|4So3+9}v4seZ#Nds4q!~k3V0h$A4Erq@du&pHRN^wV{D$YDx@8 zy{GxfXM3U@c9{K^c3Ao@Vz>a^-a<;O)HCYe#ed9hZAx%xSkK64Dj|JGkatByx4D<%v5)8}X z)ot!CKxa>ZLU>?uguZyd$QbH6w-0j5`Oh=WYXswHyr(qhEO=esLdFMYVX;&>?YV`WBSq1`2aPZ~Lu$I-R@ zJ|L$e)qY1Stbu3Tz4Kb0R=a(K(smXUZJSjiR%0YcmvMxH(PshbxZ zw(DP9VdFhIWy3~$aHcBOmoF%geIp#Td0cr-=KBL`pDKgXsL{etC3cE>o9k!-kUR}(r#{O} zt-%6Y;hZK^$aeTO{2R zhKFm;v)i0su1OHq`-VOC&0oD?QaR7aHf=Z{f*1nj+@2s3bRB=`?{^u1HgNxspvk}39~eYcG~f!w7q8)jr8zgR#q0be-HireMsH^?~TG2fz1lS~T|2f}WDxC%wd`mx4+Y|4Z< z1K9F1e?sh}w~6r1YX>>v^vh}@ z#*Wr{-;62S?zaPs)Yw|T1r)$Q)=cBl%;ns*>mDhYGs?cj=b=qOovT95hC%X=>qN5c}rXA<1^yVHfUJeJe6P; z+3*iMcL-l0Hx|1t(p|_;omMN|$+XN!n<%$mPFxNC5tRBSl2QZUqRAw&HzXz{i2;_5 z=RN)g*JAhDwdHtwDo!WYkVQv4mgYYO!4HAc=EgE=g^ZSI@dGY+6x1 z@wgEbSx0bpVN%9OT6K7*-ZOY_Nkj-qWk}|reK?drZnR}zJ|*s&D)r}?lAUt&`zM&0 zF!cxUBeESZFvbXl^^=>KlnHxuk65_&dl8Ss-vM3xsn+DCz`#b*;X%2m+Uo2tpNvDEe(n zJxJ7oQ(*kpF0Xt}Cje+lq?;5PqB)It8&Ls6#umK0I-~;w>7i;_adctgBN?H9Gm8h3 zrb9IB7zn$cZshF^|FSNoQ;OiFw7RwK8wX(BpCw)KWFE&#%HPbZ6qavl8P$tMh_@)4 z9vUm55AV-1Fo%T;tW(Gsc@(z>a=Gaw60pLzPJiAcU+V1R{gPe%g2$i7N>UgJsSH(9 z8W-1tf%j|==3ncge*`f7lGh^(!%{Ayr5sLmCo(e9NB*I~L6}23^(CZ=SFc{F=PmEr zXxqBm7**ASCQAk|%(FZF(^C(Kp3*Lmg!%MNJr8nPUA&?>%b*R_)qU0eCBMJV2pO#j zxWw#OxR`1`+6R)W!R*I-D~Oi0AF|qi2~n6IJ=trFVV7EtXdW{Yf>cr5x^4efvwYRl zbu1iD@8loq*xF58qWgkih--#-{GUoNJ$wkEbVWb6q1kQ&V87&Yc`A1?4H5j+rsz&@y{qt&Qji1z1LlMr zZr%pJ3p$>+Ry_h$lE8mzc;flE^S_FVG2$;6SZL@t-2Q z!5EJBnVId)Gg(NBOt}5(3%@a=%%}fR`xZPXx(@~}cC~K2`p9ER*dq}1sIIeZr`>8b z?_6lyy<`_TjyAW$qT26txT^rmw*6rg=+OW`D1BlAD0lugK&vBd2-{~-IsY*G6B+&v zkjK7yYX}h8>~`ndpih7WcG?U!?!MmnTq@*R&@f5Qw^vh*eR>UikKRY0B&{E#TR?jqXxkw^vk0^BK>Uq;Ed2=TW{>z*_LCBF8H_U#JbD9VyXJu-jhFWQ8`13%C75s^a zWY!v(bXi)lSS5s~Os)p&51?knh7F-Jg%Dz&w4v~|9gy8$Z492tS5B<}!NK2!%SdrG9BHO)5ehSR9o$aa}*jWM%po{@8@J z!F1hIMDHeZ{#$Br8A1rehuWC%5%MI3l}G233z{jmFZn`7Ei@uGeq ztz)l|3qaXz_7lNx&^|}NIVy}JUv5U#v7ek4!ny#fcw^*+DXd$~kVe*g)*jA+wH*|=Nqt^)r%v~3)pi~WjR9{blwx>?kf z36%^J?F***6wHEpn(ikg%xd~@m2Hw2{^iZ5Y?6x{+J_Vxf3U3c@MFmi7n1{rJDxa+ z_5jk<E5mIrcl^$r2!ksb@B@V!a*X|MMAkAkkU8@5WS#luPEp-@ zUdL4lun(W#BN+0n5sDV2OYVc&?t`613J5;OxuDVs&;&B^rZ>LzUdLN=M_li&0x5e7 zC~2&+5iD%Zcd<90DZKdAZY$7P!4cHt35o}OE#9RLX|;Hc;XRV!57@o=2TP-g_P$hT zb=tr%E=Vz8L0-^K0lg@gKjNzos5%~c1gdK6egf(din#L1xs)OX!+q^>1lkP;Az`~xKdiX=42hq9_JBa?d^nZ$or4(zm$yl z(bNPsIdm0{5JwK6{nz4HP8`5>>Ecw;=1HcWhpGN&Te7ULH|zv;yd12)VQY)}ygrP= zl9Vn$6+8#4FspxD)eQ;;jKhjsVUQgZ=5qFngx49MkfFP^`TNt_(gmrBSTnOD4Lg~z zxDc3rIT4!^qzYyZ*P6%BLJWRsuq$jq;t?J#Y5dwqy zk77@f4V0Xm67%K=zox3tdrJAgJs=e(Sk*XmrPf}99`xq|*NK>0<1Mo~LnGW{E3k5A zWs_SA3(`fRVB-D=;+}i-{b7sQBLHH%MNdUs&){P!*M%DYr&V842dJJJ`Z@;OXA)0m zmT+OFk71cRDa;}~7YS?6baHlvCm-HAqg$I<2b{J1&oyzgf;}ppT({h)W(0r8g`3{4 z!d~V;PaY+fyJQX!>l~3a3R^t$N62c~@MoP={}jgz=_#^DnV_`KX zB-n6${j~C(DPA2z`8nG*r?02Ro^&o4vFP>}!(UALHTv@t%9le1oizLY!b42)wykeU z#tPv_b1~`Z`#?ae)rFo0gMN)JMINf(P4&Fj7F97>)SmtA)3XuEoTF!2QUtvtPJ^`9 z3d$A5g$m6}GsErL=g*5$G~jR{d#8mcz)3{nqk_mXmrkN4!_KD8Ye)X0`yX(x9TrvHb9Oi?p2~v_T?f zK5q3Arf4KWX6$}FJsnqtnXZo@YQ?Rzn|K%Lc5rd#_wSs(=Qb}!Sd^?$Z?ki$V_KUQ8bN+UMhq)aZf4nO+BN6ybJ>uOurv!E^LP6!a{~)1 zM3V@^i>0-SOKwQk19eVI=5KfXW32Q=LeR52;ro_s7lU#Z?{kY!V=v#nPf3BlI_S1{ zF*9R-!s&=@Qa+rj_*qp6|DVSc;jz@-D7xWN>s>`STQDh}i6spA0e6@F>kO5wcn?)o z{GfV+g%3%rC#KnmzH95s~rTkD&h^dcnXz@tKo=((tN9Ohk7Xxj_ir zgHmoh3xQ*jDd?ftX>=U3{T@*(VYvsk<5aO8AHWK62Xs+^Y_wD!kEuLDPY0m|*F_&$ zM&1W#N+I`q%N30V-xIsj_6D{+hdz88=-6TS+v_td_lN;H%$`L*az}hS=OVbfpW7tk zl0bhm7XKCw!)7ZSYfC0-6$uc7zMwAF%vKir4YhWAM{WWHVrxGYEwmObXkH{->kzwu zJYVGaY2h4}CW6Il^H{Kh+~XjEl>JhbRB3~>zH$WU=lj%?n%c>`!ik*yyU zx(+Alb+#@!PxWM6@Aj20ecO@|`*X~1dD60%`cA-sPy~KPRo?VaD?)$|AZw=)yp(JY zjL+rdA@p@=`jp=AL->m>vik{>CM zy>B_XGD~&8gulPXe8Mvs$As%9q=b~~q#(JBs=PLbb< z_VSw*XBTH;ladCF1UNtKzu7kPiLiLh(Bsp(y^eh+jXbcOub`_^F#F5ry6Mv5B3B6@ zwtrq8BW;Y$@IQOYvYQ%586NhtjC7?Hj6Qm@_0TZ)SdFs@JXmtobfyD-8fXSR#XK~7 zGdPQF6_%_D_<>*OPf4KwFweSKL(TckF)MM2E`fe zQ{e*3bQxGpm+qH9M?+9-ulavmeF->}UD*GFq!6zVh4fOE$XZFGp(2t(o64S~LXup*1WAWARdo1@nBgiE6@YPvx%Y zQ`YVmEGssg(q3a8 z=JmaM_YNG-yncC+E~v1~VsZlnRi(vZKEkWe%l zn$}o|*&bXu?>i!ENgfY5X#J+ac$X~9B{-@%>xD(Z0fqd3Hrojl01eY&IwG)5MHz6_ zlQKWwhLjy0JFOStmtwr^o)xDHm<h4OM?(T#850pPs=;aL*(e`I# z*|yt|4O2O4$ia~wQ@plN2@1-%v0SBdK75K2+SPlQI0a^7K1H6SQPDR;jHWMzcDK_# z=4$sa@#r>|H%`+V0_Q#is&=7`_1i1&=IOe)?@YcV=J}vNNNC`zMC!ci*UyhE?>9p& zj2_3)^Jve_fCm259{Y`Tfg)?WVG*qnlntOW>rzqt<;rm)O)m^WL!{%cQbJFr7mR7B zLdNnGJ*M$U)<_H#VGM4AhnmfMFNyyI9<9^O*=vTLnBpfhDj7XH0A~H!K6^bCh3RXk01@J=6TuoH?&kQX`} z2=X5F%YdUHa%KCVmk_z`YCz7xW#%=_dY!kP>%%t1yns>}92p#)J4`2fChP`3uf`EN za8E`}+7m(KWmPhsP@` zaTTd8*)5dPwbk?$yU0^%dzpu?(oL1h*v`gP$=+;?%bh(k^#m4LO_i5(<7|v{U%`Lt z;PEuYlN~cjzS!JW(o2C5LF4}YGNQ$891j%8c=C{mO;uaFUJdtE%s7~tL0AY0+Ym*2 zQjpu_dN($wzGLg zU0d0Evuv=~n_bY~ zcx8nIk-EE~2iGg`rUBSn-ZB~V@NNd|laM18{xb%cr%;<9d7u8L@g;=Q2TE=fGhzsq z?Y=X5p8v4DMw_6@_OY?vw+CFwICcDd*rvfe3@iVrJT70&!rHb(dUx6vppD81;}s!y z^5=T{Rl1<}_bsMs!xYaU`?guOf@P?=FLP}qIt!RD}F_YZ);y1sjDK zHP9nbr5pWM*p#Mh*6**XWnbWq;@ZMWS+4IHL%70jAwLp;i$^`$DdeN>9Rq*}$f51-t z!@+@SIV(*QEXZ_f*6-7aaI6%0FxDk19bFK_!#?gM=CyhJG&*Dlpj7mh-U=3-<~sKE zib|gP@TbSU*~-fpmV2I)KWu@P&s6EH3 zBZJh{*?C*i>Lixuu$JdBWxu|<+@6l~eWBZsxy3piV|H|+cuMi|C`is3t+xj!!XwX} zxJ!re#y)*asGDG@Zs?mV@i}=1aQ8Lr$D;J}Q-m@j;-N_hhhpYhX4q0f#QML>9N_to`3uFPaOqFq8!GFV6wWxrR(5sDc6N54jQNchE^wkez3Qo!g&m2@D}28 znQGFTq=8Swwloude8c_2^w28rFGEveS7tHHn~;6N-ne43h&KcF#C+YHgF8U5%XWi zOijM(n|wQbzbBc4}NYly%?KFj6s-6h>L|zFs@(;R+}9k8jAcVO=B&>*Ad5PO>lp3q9u3 zCvs>sek~;pIlBpumycn*Ni6$#^Fr>Mnno7u4wh|n3w)%Kf>etiB&HI8(Siz`ya-_Wr{B_HY7=K;E7UBA#c>iaHPzpBNDFGJ z2KZ(sv?|poF$tJe9VAK>bKptvdE0yr)6!UgF5N?b7W}+QBj;c$+b`+D>1Z!JjrRpH z$=!ihdiSK}^Zxx(49=XvG#~o5=a50Nt_|cl&_HGZzkrX-EnzmQkkBnl%gCxzv{#nC z2VPH84}fc+vn|e>M%n>N2hiT4fn-jBNxOwGfS2H01|z54*h)wb!DAS<2RUvA_B+~8 zh6KjxbLzk^L;ItZzRSyPc1Ec72qv>P7G5RQvkh_UFs{1zcXy^a4cv{&=K>euQwayweNrxVFJ?EFJe zF|a9k`3SmFNAI0h6W8RLK$A z!w+aEDW($2TZMlHgrL`uW`r)9wzRh5I<`B_|7u83H~72u;hzK?+j%(Bks?>W zh`3Cc%oSkXhIP?a)k_$0lQ2&?ls-T|W!?xcoZuo~ZbU=Jyky^06mWP!cN`oXq@T@$ zRfaFU5Z7q82%-&mHg%V2q^=SA^|z9SAzK9af+&6SyRNAI2=+L9#16;S_MPA-tNGzC z)23OAQdU}*bbXi3Jnd!5}sC~HtObD&n<1{5;l1;y^AGZ{yC zZ?#0KpU>QSEmcKL%@4|fe4BEa$Zi_|t3+Iwf#{x6vI>@|0@y45NsMAPz_FC7DOcMj zWzar5-=w{6E|tQlBL!}k+)!nGm?9^jIQo6Jcs0ROMiE4y$Z22p+Be+b$OS-}?ecS1 z8}M`LB98E(%=noIrR@;CE)W^jrj8w5d^P2w4Yq$@0%Zs9n@A-WIin*>x4;#58yZHm zmNQd~!yl$(aW0KRA^UHhH8=qOIka40T%|}2eDs(T>fOAVy0d9#Jw|dRQhOEVP_639 zd*QGh+l*W%1WFdmrPmJfw9$)g`x9TSiGE}72(7IQ93n3`fNP;&DbMOwUO08(u7Igo zQ%KdTO^|d=PLD{K02hGckdTGs@mI z#)l{T2_~S%T}7w@(GMnbY`0MMM*MAM9bFDkxRN(Q6i^f}=`ooJj`Y8~o@=5V0!PP< zlfIW{-`z?+4dlDog*Id5pr@8}yGCb#nZVg;|1}z&>wQAZ?T^$?@ z>}n6}S*IKhI_=a#!})0WE#^J%rLoB09(tyjar3ue#Dz~~+sU;<=d5PDM3K&NKCuYf z7!(`eHY7}O1nhcf;EEy(b!`!PHMTwv$xw^D{GBQ(kO7eOSX)8ydknyeaWz#*Xw8vp z4;=waEr>ueCK4xVJ*Jt=yZU7=Azpr_g|^b%_ohTPr@So41qRo$@a6ph2vwBUSLRN5 zi0?(oHt-G*<{A9Pqv?btg5sY>u6Gaeim@Pc)X)J1KLZTq@MbP8> zO&fP+#E2r4g8#uRma zcF2VbNhexMr-rp-U9c^IlKsd{xEV$PN6>7zCWsQT7LSV3mg((H>0(+QZ~4JI^`b-vfF580$*5 zf7Q0zZoHX+k{s;CP(osSeBOEBZmcI$J|>QI+D+I!W7sJGl|-(g82`8AN>e;dM8d} zMC>sMhvnf@rG+ZNqJXq~Mobw*#8!Gzmx;E92VpevK|q21WG6S@;k&Knby)t2X3d|} zv#V~b2Fe$DEKNGaUT=trI~A?*>xA^_W6HZuwi!D0kZ5N#42`@8-~~Vq|0KEl4T|M#Ny6GRjt8(4Ze)FB z5c5O^m6l3rYpY%2oyxs4C<2KrayFb1(a1p(A>icJn>4J}*E^c0D0mrcy)Td~zKPR~rN>NjlG{{XG9!ZE?t8p{n(+K`A@BH}3|M2Ra&J$Cg zCg%Q^gBNx{@CYz&3T8^=%vl_l{v1pxth8e8F_u^UV3W58IB#r^R@UOP`JIIpJyAn8+F6rE z^O^zeHX9&OZ=Eh$tsD%nS<$iTBDds@yhBv$p!?=Eua6LcLj5wplH}&6@cAX1$@m6B zJPNistj8u;mi_SDk&rTZHowjDW7Ei-3fa5j-YEn0_V_U$kAkze5&a7e+x!BC?8sS9 zx##uclG3Kes$W0m^e(e6tEyhO&@zfD;z!hC!a~0!ta)&h(?9gC ztXZvbk^F`)L1*Y0D%^U-y;}aB$=Rs(0p;5&6xQknxAVRN-nXPps6p>xL*Ykt+rs_X3;%yHr4{lv7>*`x<*|F|d_x7AysDCAblhpssSdsG$}p7QEc zchM2KZ|PGL$~*T_6uw5L5Z?eptIWy6QA~>J!S)r>5+U~Ddk~-TPNhI3kGzVY?dsH++x^D0|Cqo)VG)dN zfxUgt)iw4vSo1T!EN>fk6`P06uTjb zXTBp1xLK(W@=eYWd%#PV{Ka6Rinr^s21qZ=e!I#s=8jEz&wm3Qw~H29J;c5i!I6GV zS0`gwJ}@^Rh?u4pK%Pi)v{zZKKfmZ@^+-aaohQ109jmT_*;X9cy0rm(60jP0*e;s+ zT$tt$80%nN$>LMgA05YVnych__bh}3d)fJHF6GGq8VMvDEGP{p=&~0q5+vlsqK;`7 zY?B;Ebyxe5k~4l!rNfpS<^)%cHtyj%4>K%@jwjV%QLIYOSEIcIo(p;1_LR8P&SMH; zbafRv!clv45LnVQiWIc|0yKrb)eVqM)+ns{@OT&G8roP~l%b5nHX!pf?imWNEx?A3 z!vJR@gQei4*{=H6`}D~xC^f`A8^O5ce-`oIsm*ZB3&4(V?Kiu$nwaz}hm8voD z&L*;pVsWyYZuZ;GU9fA}-{}IRe2gbOftM?4xeuNPk;Io;65{fH2Rbpo> zMmt;}UA%a8W!$2^5`uV6j)rxL9-(HRaQ;Oiu^%WC;bYr4)o@#=*lpY0qoNe`L47mobF zC@-i!s=Vco@(;S8EmoC9?>D|0s`IURnLm@DygFh-pmq`0*iZHd9wN4W)E5F~AZ&9@ zq#fbUH&-kzEC6jCT3JSGM_jLp{0iqL6-y4@>ds#ZD~X&Sg11&l|+;z zr!l%KLg2`bo-^*)-^d#>j5D(}(xeH}5M1ISkV*Rf1j5UEFLu}a{(EEb3n2Ur)Zl_Y z(cR)gx)}n3otM7V%nbAU1pq(w&VpZ(*}d}lML;|NZm1n};6mXsuo!?F$Quhl^Lk|* zeTganIm?`9Oa*nCi_cT3h=}7St#F_m*gdm%1B#9Pl1k(pP#dM|f!j1Z zfhTx)1H#a4d@j86M{25Y(s`E#v&Dlw7dVwY`n`UQj64Cry#kUBb7XlrpD6~LR_Rhf9!j-N==S|uv&f$NMTulul; zGtiyO>r>hFk>ie)^_#~Z`7I;yTQeeJo;78d^UrqS5ZStPe))>s zI;TFliLlj(r@iESeWhiq=#|+o5(jDze|qt3Jbv*zzM`>iL%V!n-4eq!hM(T<<3()* zk15Jn>X~;3BQ-Sc2c(R-e!MK9J>LGWYwJgyrG=i`_4(Yh?XUM`+*-Jm&C2)oZ9UJk zmQ&4gH*Dt$2t9^|EAexC9g{x<^*zw8fjmS!p4WcJSV`}r(LT6FBdB_Wbj@sG>qu{J zoWN$C?78UCfa2Rpmbds99Qd9j^F-E*#>dCcmcHDcF&BMnLc{<3>bEnA$;r+BbS4k> zCoHRS)!;c+*Jm-?yzJtelVosXeZ#j;xg(=^xJSO^6JfoxQt2>8iM8W|w)s*DgTmlQ~Pg zpwdm!@s_iSt6>ml{NOgu;o(_W2_*%dNT6c5Psz-wo6H3;?PIbV?KoRhtVY6=GqZpQsVvLw_&c zOZ}3lMii6gc8BfX;4dTf_RZU2>5^IQ310snMMWoDmw#$rz8oqc@}T1CeD2xWZoWl4 zv#^7W&C7*XEY~2Rf5NTD|FwG=W8~|)EfU#-hv=IKp43C8X{WQtIqy_3(Rt<^*|w5l z_Ow{n)qR@b$?Z>BW``Oh93=P+=bwFG-*`m!ql{&%S6%y6)r7|4 zlasYt^`w6I({pK&9>2=4Y?D`0&edhLY)yUzTB>@vnlZw-(juSTmPa&s+83_do6bEl zc9CnMbMhLLOn4P+v>Xj<124Q*&+Z;2VD_D?9$OLo>2|)#cX-p71ka(-kEd`K+L|?B zP$9ez#!x>;Wz(-FrX;?Y!p}S+m0S;r~Ij+}* zjf^NWTu{zvIu~hIS{o+!9|2xOFmRudk|VenGxcNuAtidS9^N629Th z0n2C7+uyBM*-vb08(v5(hN&J-->2^v$(;WNAVL!R_VdyW{`7twH;&qj=C3X+y5TR6 zy&daNW^!5b$i#ANtA7hxKxgJ{ujDI5S8x@%AULnuqmOsWHlx*?Op%)4?Q!ke~qR_9-C{-w#wyHBgPB8SU?gGv6A^CcryPKj^5MK zwsF^6;c7gG1wjW3v9A1}*|vUv$s)D*gTT?#_L=5i`OK7$+&hnZV2$b~!eFvoDVb+W z%u^lxV!B{|aR(!tBb?I z*}_^^jEy5j^)9J?7e5U8$9kNUmX&oL_xV7NLt9TLhp&Ik)Uw!0-+nGa+o$a83uv}T zA}eq=9oxhvET!}$5~00FgmhSOf*)Q#tF7&n6|uIoOp0r|32LPccG~jta+VpFUt;8O zQSDl5&@SG_zZ(2?&xi9}JUjo4!%Hx1x8tvW)QAp9y2)gc-)euyE8F)Bw(rjGZFv{o zf7M@{sv0uMU{YedHo()#!TeL%eU5KplUneZglG3GzYo<%pKJ4T!$&$kiW%)rJB#}0 z$f}pfzR?^eZ-RF^7j&bi z)+cm^-@xvChv-1z5ew|6Gt`gG7Ul{|w2ac*+GDjnrw-0swX`4Wf5&Ij=s&%=>x%xK z`NgN5vcB(%RuzRK_Wj5pF)2@Xv!9Pjg*T5cm9fKH&JtwA_>zKeREqi5d#ufMa$p9# zVK9~!xnXnFc&39f*!O9hBR`9p4mhvm!j#FTCv$TsI*bN6ZqWZ8aYP^YS=4z%cMj(4 zTJ4+cPFVx%`F%1`A)Q^3W;>j=?w!i3Y!{3%^t)hGst85+Jew{$tMOkUUw(ZcE}X&h za?IO(!lDMfZgZz$f$YXFoy9%a=U=k$+HphubTzZIgr^r2&%WYTsPLRu;1!>X2noQ-y-w@dEu@jV|}EHk^`9r@!%#re-(rPR0kje`~u< z_whJ{>xX406NdawFG0=jFy>dO_rLJ!#JZwd&DxFTMF*qQm0c{h zdqvqlC}x0#Av109EC?}*D|F~yQ6Or0yq$(rQzwVtr^LL=#Y;u2ow8OGkCGc}Z!+Eq zmaJsVl+*blAy`4X+Kl%m?7**V0*(HrNiK6FOLa`CHW9X}P-G*U?ExPAjWAw%nVUB3 zY{&${OchclU4`UM;~rZhO@H#_6GvA4RZ>+TdY?%d{YkP#wpsfv@Jamdwp)R2n=hR8 zb!6rJ30mpaxE#IpV^dSCz!y%acONo&ylgsK zpWmB(T^01*2f+?;YwPco*p4uz7SVye4DGK=f=bw=t@~`Pl}PH|k|T%SL!+UA+b1@i zfEV?n?zxRjap~*p57QJV!{a{7oI|b2mo4Wb18+y#klC{^(F{q;ZzF_Pu{Fi^hkJT? z*#d5mus)-P+HD@s9rK!Y9#Wxq_1dXG*@qK(=qnwnbxYloZn1NpRA2%X#wvzS;2{XH zNmEr-Hxk{uW&~BSx&un%?G{|j)k7mW>}Ncppi4#}_?8S%(;#x?*K}sAt#1F6lNNcF z+A|>Ml5Ydf28e0>$@sI@o!e6?XUrq{@IF{r&Cu5G642KqXkf*w9xsxrAiF(|#8YzU zodBIw<)a%jtMk8fCpLY0Pt4FecxQ-F?2V4t{^vErXKs*kcUA@yI;=hsGm`(E;K#bF zzJ6iSyZh2IrIefCNVbB9P9`*Qm1{!t60{wb+g#`UA+I#aq-C_F!o8>WFy-RJCQpl8 z^If&jA0JnI2%H<2@Mfmhh(8H!f&G(-y4@yPUqLfwBEHs={0!_Easc)GG|v`7s13d z;_UzdhfiIbLsoHNT4wkcAxW3)@RicC=>k9^So%OWH z!*}yIv$M0Avh6Ti!PMlckmVEsMqZIGLxcP!Yb~i+!p^-FKd+B~RlsdD_zBoVlYie$ z@W-EZ?-1L!uf-p8K6W_#c3Yjy#S}5BYWKoXMvSYXL;iY-XzU?Kki$?9k`k(;Cc>S1 z8~m|gMMu9c{GIL#HO9Bp#d3cPO5ak){46fF>WBo6wA9I7OcAHT?au7`e;bZm?5BRIOfMC~NXoPP@F!DbIx(djwy?aEan61nCd|3qb*eZ) zfX+53Fx1a+gTdpm543m;LwASXEfud#4>u%uyF#}DXvMG|OO=!e(MF;B5%5Ks8t^CyhSiBm1~ zJG$?Mm<1)(;Mp92fsq=eb2lZ^B4l@E%S`r|7FQaUQa-_OJ!KzN_4gc%XJ%S}TE;j` zYrCqPZ8)KPI9YrE#*F2@gyJPPK)iC8n6icY_VylL1M7Jx+@8zn6(>M{qsKn~CTS=9k6}^2AL? z2zfr;6Iiuvg4OG)YKQ3Oy}OHUTCF zUA4tHnJVE6s^3?3!y=dFi2<+5HUY**^P5Ow`v?E;81Dhpogfh1w`SF=1YR(Po!IV1 zonTmUbH9XBkKV3F9-dq3FUuhwyw$b?h{E+A5lV>ybUSA+`zQ46$c@{A)xFXZ(a(}^ zFUy6c>DGobO4BKqGq2xNFTDVT3e|A*{C=l8>l`voB^GHG63f*DdQh2xl+!Vsw}77{ zZKFb7;30UYaGEB5`2~2Nw%mXUfF02)tyLf<3q(iBiOR!2^<)!7Z4s&! zR{c!16?Tb1*?f%l*Xa!HM z^t@_CFk!?#zetvUX9L#bXQ#^O@fWn-SU_~;B2>*!fb2xc}R12W| zpb7c+@v@2(%7KcA&VW1o!ry=Vc;r30LWHZ5X`RXd^R+Y(?sQ9ix^T~_*EiHXYtqOQ z{Bt%6Q+6*DL%|##degSCROuY~i8JZn6A(`!7y$goo0VydNrlVB(yQcau@WohSoGsulY2nun=G=>SZBQNwAFkMBbnHX}SG z;0tD6>MvJ4ubgqt$a&3Wf;Ylq;B5jxbP#$SdToCB_``<}nX>G--jb?|wM3fun7uY; zp$f9p@b4ki$GYH_Z0*U>#yu7#45zMXf?@Gpupx+~oby=h_lBKSIXhY!oY3m5Zphp3 zb_SeVEUgW)km5o=KUzM^pF3sT=-;PU;G`@;?Og;jpW7Ux_7ohFH;EF9wD^F|c6Uw2 zvrbXm^SCeN)XP4Z-z|FMI zus;~-*H7afSXfzFzoJFlbivd{L#LbS)5#?( z)p|&xi=2o}Fctp65O*mVkY$0Z>#4xHQ#nPT?4lNhyPmj0S%)Rucw^Z;2byW|@28Ci zu#j7oV!43Tm`jvIdTLMKZ4e#k|GPU&S;kINdh`+m%AB@!Ms3|;1?c$cm5-#0!Dp=~(X@n;zeHqH= zogZ;95jwlNYE4tK-Xhw;1R*WR2lg?(E9nvy$|(HwdbU&qO*cRtt^RZm(X#Iios`%S zs5dQ7Q-$iLAEuP*g9&Kak)8m@7%Rmag}A+Uzm{;mt@%c!OyerW<2a6jp4>Ko|Ug`O{H483>OiHi? zCM*}qWV87(og)a&xpjyNz0{2F1Rw(|HGqi39N<$3Pq~3_Zp*C7nUJD;v#NhlZ?TFFwR_! z0AgnLd)Yt!4#7RmWLliWtBYA^ueCC|Jj|_FQb+wfS8rKqn_XOt-+W{(#*x*z^o#U- zn!C+IK+BeXQplE-X{Ql3`65xLPgrZg&^Kd>9=%%TZSX}GHPvGG_0^1z;A=gWP@_x) z!r1emjc)`>3%K*upIR?2brw->Ri<%IEzk*?eV7Uqqe^|Y2P*URx$3>C-)O|oi%#`B zaZ8Mji7)r@fg{yhi!bYtf6-m-`v<73Ya9x@1E}+8!EfiChCjkeRvU6av^N zL=WSg?$PQvX4@y$J*%_7mzy#5^v`1Qm@ybsGz*q63(T|^>k(vrB_0>xiJivPTQbsh zlg21SX=`ikTa~s-@Qg?xloA&bsxqs*5;9tF7_Ndd$p_N1-RgLY9>AJ2_xjsf$#E;G z-h$-wM=?qwY^FzFo^iRiJ=cs^IuKf5(Zk&FjgChJ@U^QSrqIQ4_mLU@-qO@G*fD~C zG3R9r7$mHtYyT2y5C83L>F#p77Wi+^?8Fm8w!^>^z9Zmu> z&V@&DV614X7ZEYZ$+1K(j;xt-r{J`?HlqbhP1QcUoEhQ#Rq!X;;i!k#KTkbq;9jwD zw<&Q9iW%+g-3`F4Bdba{SOahv3~}B~FsbSg&TZNFa5GX6QPYL^9?`pNvk4<=pC^0j zHJg;zV%=Pc_1Uo)C%~@K5=8?O+-|Asw#>Zc=ZWn)5T6?6Y zO4f^!;5i1J9Ge_{X=Bs-eZQdJSxDB5{HoVPh*wa|EF264BnfT=Qr-PRLp4i2m(iTa zJM)$q{C(LTr$ppK6f3w(C!W{*l>O;e<@TIk#RNGeB}r{^VSmR}?5Ar6X^VDYP6w=F z;rbdiLVChuWwr){+@Z`w<^{Nc*>qj)rMKIFV4uD{7jUv z*ea~osd|ajZ`0FhN?nu`i?)@%eIUKBq2E^HS8SlaAQ=(HWyH+ejOPfR(}kVRy5wgJ zC3!GkO^~EoY7Y2{PfmSjo=qv!-?QCL@ zeG%1owsvZw&3|wccoNS6%DYvGHOo35a0hIy?_kxnjCfi8+s@b9QtEFYPsYokue9Wb zx@}=V0_mN`;B;CcD3H4=A9IEP&XidE&;c@4J%6*wymw^@#k40Q!bPfzoz#|lxnD#) zSi9o6`I7_X6op*dI9Dz4QcJ`zeJu}EFEXpeMK1DzZo!Ifi=sh<=|UL&3mW)i%U4}| zrJAWIekj$reJ<&EH_yJdPESO?43PGFw8VklwbB z&bg^vxo{I{4wSt4^x~bWum0V?Ep3pq0dPXjx^sV?3;YLH)<|E;ixjC+aQ9d< zUTlby;w<270Ec5|SB6&xdqnV|d;1}M_*IvD`k2yAn}1$-G|>dw#$$i=VQEY|w{xK@ z#bbHWYuz&IJGICMXyV~(3*R_8KG;t1+iv~Oy;LYTit~JHE*IMS8{UDbv4N>6oNr{$ zHp4Kb7zmFbJJ{e)_r5^plGn+o@wdC(IiVs(3dnbL#poWG25hJ8bRQksX8$?w-Edvf zO9UGI)e7ygkm*2)T=e~oD0d5CEtq!|0fq}+M?3VeC#ph?zY$ijnC){91vMbsHo=Qw z3~CDcjXf>#0t`AlfF47mpnXN6#w9%6@XBGMQ>5Jxy*`GRckjeR{mn{rs1PCZx@^uy zAZ0H#b_;bXYQY3;J7xE}0)f3@)8y=QDLSdOnBxIIdX#Fs{;} zXR;!~h?TnGBHiD7X2)bqAq}em_8hk{N(zE3)W{8z%ocOw`~O>swp+j=poEdZFGkF- z3lP}&{C6jC8~Zk~YIQu!sNeX1rmF+8Aq9>{j`uTRyqUkQpE_*pd=!1xy<|Pn>R?xD z_!re6!a=kFkg29cGOmzs7GHrH?Ttl6Pn?!LS&-Wc7`}H#y-4Eu54C?M%81Jy^Gx>< zIQ$hyC}l*C)8KoybGqaXv7G@5zdf9%s;xBvM)yvlnTp=Y;(i&@qZ7QI!jFzc->0SO zzFdP2R0D$W2a<(Q3i2jbZvE^neI$tWA=ThpPipd~JG4<N<;bm}(sl0ZsHn{!&KRo14xN z%331FCW<&A!x9;=(`a9B6$7X$uDEPwg&4!zy{W8m)VgDXG#)nA|y-sZ@K zsc--c8v})8zv%i8#EeU9rFG~C%{_0@t^u>!sS73k5MjV^;@;yJ_FTBmtz4}`PnFi1 zD;!!!%FZg;C`N#h5e-2JlI@PH7@O>sd6;}~68t|y)3M_cLbRq0Us1Y+*(F2E`q_?; z|4Bb1?Tcf^n0^6FjW#}di@Kt{4w-v}d$vJvY3dWswwQ8c}XP4$s@{PtOAh)R#|;7$$%t0xU7O@iyhbQPCqo1kFROV9YK8 zLnXkvLkLp6t^N-z+n02*mD0_aZ0?wT224y87Uc>#Sw9-4A|w6Y=5xiR2NqY?5&*U< zab!!489(R8 zr>E;JqT&E-BVt*Qb{bNvumivBPko9=G)M-gSV|p0J$&u!1Kr4Pq~4Jr`L>o!bt_hf zlmv#6d{kRcUB0|MsYvY;_`yq)oZ4v--ZAjo8cv+!^!0=Po8ovo*|9 zqPw(xcYuIp6@W=ucAgpavNuZT;BLxhribt-?~zj7D_5%d40J9)!VXE)0>PViwYL-w zt*67C)C@3@r*TYmvEz0=2oQm7NSjkq%)EqOgVPccP6mEkKgjZ*y?C)AC^DnrCcan! z8~lO=X1ZzOF#Ky!#LxO|d*llo2`6wYg(N_us%Z9uc`r(xiG46$oei!auoXS37pyR| zkC)8tYs#<+HGWe}{22C40OB;4iMEp0m7lC$Ku}g#%cKrm8uN2@nM&J|U(fny9-=)(8lJ=T=?ANSf z()x_fAGE<9*26JLEmU^WO`n7S!F?8R970tbN}4XyY7=q%Ind+^2YU!$W*S`&N?hDx0Tc#R+ia}%nxzpr$YTLQmN?7^+*Pk zlS3v%b?D@TB&ggXsbU#@dCJB-!rDZ}B8#!itv$B(52g@_!v*SiUF-ksm0{a|Y~qsV zz7u*4f|uluuZ<=d9~ialxE)KBaEDL?xD-;bc{^WVdYOMWe(9_9iZPRgg@qz2c|!jk zib+B&Ah9$IFl~*6Mg42wCDtC0D1jY31lhY6WrLN&AdKlTmSU~WmDla9*CA|SUYk0o zW}mr-wuWP4W`;asQA=~A^?*qq7)|nFOMw2eS91(rlPs`s6wAqDxO*8r?sBP#alCRl#Z`x#hmFyWtBVZICguPO za;R0`=G9UTQ3_qS-mF<{c!D_L=4z`0hl0gz3TGZeRhDzWI}^u8YU6hHi6>9xvzSMo ziaVS5$pnsPqKU*jtMVJG$I89$-7XvvfeCvJ36^p)cV7bqN8HID1VFgv&ufpJaCF{J z1Qi>fgMG@jGqG~ctXG4Yepf!tPOV2c7(qL{&lIR(i4bz;%~bHIsY)q!%3p+3%4b#%R7mQ!#&Q3BYYooToNEry0> zL!K=dI>n6JMYFWIsMB;U{8Ii7p{+=aYVa$D_G%c!1F&~K3x*Wu8`o2?{(ZoPkrlgLD-EmhM9u50MWGpFVfcQ?$eze+YjyKA4Z6 zU#XNfThO88OOh91HK@Ae?Ylq{{wE`dCH&CD`AcO*}ZkFD6-y|8fmbh@o_|eSe>~LuRvZ-A1Gu&kzqw|6g7V+LkZR z&j+v^rFFP=nny-oBB9a>a4GfxU<1fe?Nl^juf`uo3A;;rJZ-cp2XMnM5SvtlUijP~ zc@m&UuK@yCbzeXC_l@}8kvTBZU%++HfMG+roYtuQ9{-)spm**Q{AoPqkxXB&rXTKw zgDvnWEuam8mibB(gue}ej(ifU-cd=LzS4&X8zZ#g#HdO_z|~@+zt8q(_M&pHre89| zM+&yq-5-b=pZn);i~6sn4D%zLmJ7Wy>W{+^Wy}g_y>LE`QiU{koBBtVDebLXXCN=T8|8BOe;n^1nHCah1M^fwE4k5CrGs<_Ica}gPk1Jfv!{euk0V5l zKivI)=TYQ3>h5o={wsF;A*7J|ot1ijptunsD)1Sk5f@%*X5S=v%IlDis@9bdQLG$; z%m94+5S~W^2${kjX0QvQ#LC|;;rwgHpm7>W;(TzJYHA^8|aG_O4PBgWvCq!WP&j=Mk<9pT+iH zI6|jlpFt2I_ro>0jy5#;hhuUeQ^OTn~%(o}dC?#|jvEyG3 zpvi_AC@uTFf9E$qhkmbc9dvdKu@+~9)pz{SAAM?oChkH=pk1ke7*$3Dcc3$pd3nK8!vpLfGsbj!DR0>#}slk6=w0+LNd9=g(PQS_Tp^yi6F^TwQun$)J z>Bjh%qik9m%>_lS+1gH*!cnz0OA@WI(%sP5HE8Vf*~IhuyZ-t0XNP!-$51I$#c%hk zqQ<|(!K!a!!qFZGDJ*}=qa0FuotkY|+5=q{M;dF#vt`BKGgA6>3BriqnX+6#cq0OQ z)G1R5)3oI_p?^?j^57xA7*{o(OZDK}32pu()e0iCrYrvCV%~yw;sn18ler+X2yCza zymL^68x4BBV3KrnQ1r-BM0>_SFxbhI3EJZ4xkp=(+=Eh6pQVBbVz~`0MaV7xErz8x za|>B;y5zELsJq*qw%m!P6)W)!0EuCPN6rKh(oREv0>HFH{Si&kO`!X@2x)xgf>s9( z9db6A87ODJ^?Tw}0zqsWZZy{q8@4~oVE=>?P-T*g59n^ti8d7E8jLY`eATZ$`_C$wLthAh=I!AzhyYj3^2*lVrplY2VW61gR#2GUbF%;r7UiE zVk`{+X99)7uJ#HH;oyw(allq$!hh?`|JT-)$2E0q{|OYMVu=farAS;*<7<>uQBeV@ z6*rXSiGs4FDk3freaenpOX~t!TA+vawyk2F$apWbLN+xcpD0ZqmBPqV)OE=Y$X`VblnX~7myLx2nE6jw2t(-zg*#i_ zpVmqltQBe`(12(3>uCur10u5rEg6e%r;RcoO`hO!lXdm$TyF}juicQ-r=w6!WbLE^X_5uu{*pV?Ee+PxJ4Q<>@kpzwq0-mtZlqNj2tT zDyV7_40ghVRUaE?(K0uu>?3b{M(v8b>jz${`8JK0^b?jQ|EWHJ;aoHha}nK6bPXwIsAsSmAvz%Qf^I z2gPjF9cPoeGv9sz1bq}y-10i_%3?-C^OxU;R0 zUBZ*}T@3FA2$CvLkY6*lDNqw&?T!83>7ztMpN!!-epSV7pz1l`SnIt-bJ^z7i-G~! z9AxA_*+$hz^vvw4&?`Dd@za&t^@EJP0IOjjJAM&TFOO)R2C+R-Jo`&HhQa7^O%>PT zD%EVv<%J9TX^zc+iL-iNkO0nE&Pto$4puXMQ8wFS*~w7@^XSRLJ&4JJz4h~E-M@VK zvgh7LjLWQS*`B#tjX!)k9M=cZI$v!vEA7ae-?|l1e)RW`jJ-6bQ0a}liT>703gXzk zDYW90D^;O<_9MUnKU>67aHL)s?r8>9Bo%DYf(dk(VF){w%Jf}ZuhX1KC{H2?GM4QM z_h)FTj>sO>+Fd4gnqiNJinzFP0LcMn)hTdxV zo^u6Qu-Ao>D%qKu&8C;B7Ajizh?_-~(&}=qeHCg-iMcwsOX)a+V-xx~G~6U9Hb^Pc z1B(8t^YNjhVxv&TY);mR|5gx}nvgFb=G(9j-<)!erM;6pu1(|bN^HB*9gXQ}3c|F1 z31^cUAodUUmmU?`-A%lmnb~W{ifC?OYg!0qJTJ&td_W*)zO=ow*Xn_LfV{eqwZ&e? z9h~`d_%cV>j3QQZ$p&b%7>Z8853A4lqwpaYOR`%!ISX-(@tBzMo2xKq=&u?kjW>102d7TQqF=~a%*iY_uhi?FTs`BBc-G@Ubl zfO&MaS$Xcv|7D>}I?hD+A&gDK-hmbaGJZETnsZrqlc~1q;e_e$=%Y55Wq`S{eD-s?k}uR70v8aBVsfl_QCxg}Zv{j1k*FK+a-;kQU%OqeLFb<)t*tfjP$>g_9ZS z=@FxsJT#=%n|e4)FRnPcud4I!Qr-~{kJ_sWdwqxEGVIar zU=KCvk#K*LN#S@FI^_*YKNMNvfJD1ouZ}?b8kL~H{kbNSsHeSG|1FQ2)$O1UiMFM& zo1Odp?qrbV)i-H8K^o4mipa~$Yhx2^gsjAJi8^3sle`*IGl86_V4ZGXUkl{ml0xUF ze2p;a)Y{l%3tN?nO0@K%XTS@qJ6yWpZ=~-}vEokz*T62&WljB*Pi-#$!>1?*?;GxM zAMv>1p+iB66z12BSmU(c7r+3o5q#tb=88UJ#`TuK0M~60crf^tfoYu=1IYm%u+in5MO}C-(l{R#k=`3CHP)L5q56#8`%MvovNS#SjVEAo24A)&jeHI zJ+G|n_4q(xrk_TD#%vHoL>^GMs@Ptf!DkgA8+x-s@DLF&yOyFs8osXLW?6fCd;f(( zcocB5Q%P?(=F8mhb?~p}7nkJc-gqq?P2N)Idnp`Pg`$ajuyEwG$HvmXy-KL-Vloq7 ziV+7(C+0TLuEevDw->28^Tj`!25T%4%HP^l+rFb}TcnX&#*I9g#uGg`^V#AEA?3mk zE5S&TQw5`l)|kSWX5|Ui$Xe}yVm^k$x8w>ROAqk122-EX!N!0AAwT<>19X5V|X%bswbVK@SOQF4$^hkX)2L5o~(0k>4)+& zhb!=kpuP~Y^JOz}kly}xEiFS43Z^ci{^*+Cw%+u+s??>HeMxiA3E9219?#jZA)R`} za1?hP)NI!PngZF3l3#zPa$+~F#@>S}z7T~HBS9f)ymry(chvVvO-jmUGdL=Y8oq5% zAo7Vc!-32S_a}c1?r;aSm|D_M6{#qhTnGwe8K2~GA> znPJjX@1m+4a_hGmTYp?>w>ZA8m0dw6vVYUnZ+LU-S&vOg>Wzl>TmPGhm@evv!ub~; z)TD*%oU9w4E#4!%6(7H^t+_e(Yr5c1WX?1z1+N_yxzZ}yiwzyl)YR0>-MuYSL1xDa z>g0c9S;V(o@e|yTU}JN%?S6}P8#*FEfwQ$qF+v1smLwN?m!wdyEY#2=aSoLR7mf_E z8kq~*Z}@MVTe4tNKb5=hsez@*6n5K|3L^)ckts--Ml1k7k`gNPOkw*+n$*w{u5Gop zzVp7j+kYJ^F0yS3Q=ZK(xT-KYFg}7)bh6v?{Q8gMnxWxatUi-&9z@2729E*zRdJRnUAc)YS0NaKp`$Vu>qF=eu&(Hw-Ca6;@ z3!|!;Mhk2eYdQ*!ocYA={}JNo)2{Fs;ND6-D4)}=PpVDNwqQZ9Jg}*YBS7wqm@am& z&CQPYZ9C}ln98?ffj*zv8QZLEX-z+)+`rPVuU%PT8FB!Q31pp2wQq)qGq)mND@UKk zzEZ7)Jv3*mi*6-K==N=7CrHFp(+EEF(QefWKXM01lYAE%8v0vjXXkn+r#eps@pn06 zLjt&ntqk5yOz1Y%2Tvlu+_eEP`?|O^Dy$N-A9WcaG$VMUpBRh-4C~@=-rPIiDNVQY zNs_~ra$5R9?1eP&2W}OVV&gJtDiuNM^5wbL$MJiIC<6KYu_Lv!hjE^A@m|itj$kz zE`4Djql}pI4=T6@B#VM?^NOMRv$>F?M%>n7_zYH4;3(C*ID7kL9Ba^9OYjy25y~4ChNscEXL?e{9C?8~ak50W4BpsjZm-SS{tr6QXO(KL+vM>G>DvqXLY7j^RK zHM)w>o!N=8Wg95d;r5pWICQe^H%d~b5Cxk8+% zN~ZAv^0YW=X|1iT2S-|7rdrH)(UR7?9(FTNS3i_7d%=#nspscic?Ec1x@l4nn*dO9u$oozbnx8p}o@4kNT)q7JluBve9u8=G1 z(w?81>htbOUYoDy!B!O#c^Nj+bLdz=W#^|%$s{>3-jegO_TZ9>E0^{vkxdqH70X+C z`ok~WcKw}vsrv8xGJam>UfWz%qe|KhwnsR; zmk&97?!me7b+dA0jKL2!)h#_qO}eVxmc zEKSkZgrY;a1K97Pt;6T%&-cZN@{11k`c(E;RXL(nLq}hHvp0#~*sSa|WL)RX9|n0Hi9wzO3riOc z3=O;Cf50w%`OuhAnHb~L(EaY$Ou1a|aTJ%>>fno=K&!_3+uQ71Gj^=Jz2`sc-Yb(m zw<_LTdhMOJY}y3#$5ATG$th@KdFq(!1-I$i+PVMo)gjR0)zp|=SO zN(~7k2#Rsb^o?rlkNP#6{4obD>@lSc6-N^O*w^A!$s-XJ#l^*$-cfDavpJUjAmn7c z{9<#(g0=yUNjD{7Adhb@d`WB<(wFg-?|$8ukkR02!&f6+B!HwekxCV`VVju z-i6(G6Y)hJN%@l^0<;e-kX>uuP6Q!;a!u4tllqjTvkq_7WG+55Cd1OHP9!oQ>8+AP zGnL2KRlQOrT_xKbi0;##nS`h?8`gYf-HLfhl65yc-*Nl-Q>?G|W`eeibC`m*rdHb7 z@v2gP^rj>Hq2Z7AyH_fX5s}^JpMPGbVR~q9{TLE56DN0U*E(Cg2UIYZbENMLin!7( z;4Q<`Xxo0oyn`cJu#-==RP5DX`uW-78=LcpWK~=riBthpw^T3sRp`H5v0}wQHh5SZ zm6)8I|3%QNXKNkEp0A*sZ@lgHNe4Rh9rJ7ba`H!F&?SM49Lsp0`?VA14Ik)I5nCNyak(O8bLA2T@)*1?T2{E!sZGvF84D5j9_yF%MoFXx zl)Mh@9U_tI>Zj+$2-I+#OBrQvH^33OKV!$iIhXpT;103}9?70YxYts*tjp*)kMRaS zrigH}n(W?pQkU{EBzP?*Idfb9*>q9LHJJ)1g@*M!rfg0-$8rhK_VcVkj)add{{>dR znTQF5>26Q2QD(p&Cmz)M;!Ql>*p3gg^A9_xS6SQImM`#~OZI$GnidTF{9C=~>Vj;D zKahQ0y^xCH=6YWA3OW@?DKM~GU&~(z;qr3BaAwJl$;&{HjiI}LT^T@vU3TqisFoOc zj*3C}1}O7!-xRD1)!kp)uN-Mn@8jkbn9NcRptq09&+j^?yPwPDQlf~rQ$$Ye%gyH! zPXH-94q`4o&}(FDd~8dPA=$e0o{^`4cAlq^CeZ;Nm@;+qK}x^4VG{N9jS=x$k;)@C zW`Of14u@iL2l`a9oHDD8_z?g5_qnW8N+Bx5p_v#mGoi&aynnJA4 z;;8+y85=?~+9!=L&Z#foIq(7oJ9@)>U+Iu1QS@cvwuIZ8it}S*W0Omx#)-A&Hbi;$ z5~?OixbR_qN=xOVRbs1CzC;uNdPjbpG^Et^%SHSg!B1OK|GSd`#|utSeDitc?Yko@ z;?A8r=Q6YPY)L~xnu`)K-i$e^sF!r?8_RV2+<)_)-);@Aw0Crj+FX2}w$QOai=eUf zdTUJLMi`6ph8doSIbLsENT^OCQ@1Akv2Cu!$h~3J(uC@kD2o$D!TKaRn~pw9X@<4a zSl=+4!vLLl83ShFy^9a$6%yx6Ume<1H=U4T`O zeae}+=Ul!ES=Iy3737l!!p>*`Tu`?@XR}mf1ZdB!jSYEF-#)Zge_&ePIZ!Ia0K>~3 ztugV^w&IbjLcnlOwfl(oFC#9%8; UCpvG@(2i^{HD8moTKw(*0Q;I8RsaA1 literal 3215 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 B5{m!; diff --git a/lizmap/www/themes/default/css/main.css b/lizmap/www/themes/default/css/main.css index 7d60477ed6..a3fe26c803 100644 --- a/lizmap/www/themes/default/css/main.css +++ b/lizmap/www/themes/default/css/main.css @@ -1,13 +1,115 @@ +/* VARIABLES */ +:root { + --header-color: #43718c; + /* --header-background-image: url(img/header-background-medium.jpg); */ + --header-background-image: none; + --color-background-primary: #ffffffdb; + --color-background-primary-content: #ffffffdb; + --color-text-primary: rgb(51, 51, 51); + --color-text-primary-content: rgb(51, 51, 51); + --color-contrasted-elements: #43718c; + --color-contrasted-elements-light: #c3dceb; + --color-contrasted-text: white; + --color-dark-gray-elements: rgb(51, 51, 51); + --color-red-elements: #da4f49; +} + +/* BODY */ body { - background : #EFEFEF; + background : var(--color-background-primary); +} + +/* BUTTONS */ +button.btn, a.btn, input.btn { + background-image: none; + border: 1px solid transparent; + background-color: var(--color-contrasted-elements-light); + color: var(--color-text-primary); + box-shadow: none; + text-shadow: none; +} +button.btn:focus, a.btn:focus, , input.btn:focus { + background-color: var(--color-contrasted-elements-light); + color: var(--color-text-primary); +} +button.btn:hover, +button.btn.active, +a.btn:hover, +a.btn.active, +input.btn:hover, +input.btn.active { + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} +/* button types */ +.btn.btn-primary, .btn.btn-primary:focus { + background-color: var(--color-contrasted-elements); + color: white; +} +.btn.btn-danger, .btn.btn-danger:focus { + background-color: var(--color-red-elements); + color: white; +} + + +/* DROP-DOWN LISTS */ +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + background-image: none; + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} +.btn-group.open .btn.dropdown-toggle { + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} + +/* FORMS */ +/* Form submit button container */ +div.jforms-submit-buttons { + padding: 5px; + padding-top: 20px; + background: none; + border: none; +} + +/* Form submit buttons */ +div.jforms-submit-buttons.form-actions .btn{ + transition: none; + background: none; + border: 1px solid transparent; + box-shadow: none; + text-shadow: none; +} + +div.jforms-submit-buttons.form-actions .btn:hover, +div.jforms-submit-buttons.form-actions .btn:focus +{ + filter: brightness(0.95); + color: black; +} + +div.jforms-submit-buttons.form-actions .btn.jforms-ctrl-reset { + background-color: lightgrey; } +div.jforms-submit-buttons.form-actions #jforms_view_edition__submit_cancel { + background-color: #fd8c62; +} +div.jforms-submit-buttons.form-actions #jforms_view_edition__submit_submit { + background-color: #aedb6a; +} + +/* HEADER */ #header { - background-color: #2B2B2B; - background-image : url(img/header-background-medium.jpg); + background-color: var(--header-color); + background-image : var(--header-background-image); background-repeat: repeat; - color : #FBFBFB; + color: var(--color-contrasted-text); } + #logo { background : url(img/logo.png) no-repeat; background-size:contain; @@ -20,22 +122,27 @@ body { #auth { background: transparent; } +.navbar .nav > a, +.navbar .nav > li > a , +.navbar .nav > li > a { + color: var(--color-contrasted-text); +} .navbar .nav .active > a, .navbar .nav > li > a:focus , .navbar .nav > li > a:hover { - background-color: #eeeeee; + background-color: var(--color-background-primary); } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { - color : #333; - background-color: #08C; + color : var(--color-text-primary); + background-color: var(--color-background-primary); } .navbar .nav > li > .dropdown-menu:after { - border-bottom: 6px solid #F5F5F5; + border-bottom: 6px solid var(--color-background-primary); } .dropdown-menu { - background-color: #F5F5F5; + background-color: var(--color-background-primary); } .navbar .navbar-inner .icon { background-image:url(images/sprite_20_tools.png); diff --git a/lizmap/www/themes/default/css/map.css b/lizmap/www/themes/default/css/map.css index 5656f09f1c..532ca1991d 100644 --- a/lizmap/www/themes/default/css/map.css +++ b/lizmap/www/themes/default/css/map.css @@ -1,13 +1,51 @@ +/* VARIABLES */ +:root { + --header-color: #43718c; + --header-background-image: none; + --color-background-primary: #ffffffdb; + --color-background-primary-content: #ffffffdb; + --color-text-primary: rgb(51, 51, 51); + --color-text-primary-content: rgb(51, 51, 51); + --color-contrasted-elements: #43718c; + --color-contrasted-elements-light: #c3dceb; + --color-contrasted-text: white; + --color-dark-gray-elements: rgb(51, 51, 51); + --color-red-elements: #da4f49; +} + + +/* CHECKBOXES */ +#dock .tree button.checkbox.checked, +#right-dock .tree button.checkbox.checked, +#bottom-dock .tree button.checkbox.checked, +#mini-dock .tree button.checkbox.checked, +#tmLayers .tree button.checkbox.checked { + background-color: var(--color-contrasted-elements); +} + +/* HEADER */ +#header { + background-color: var(--header-color); + background-image : var(--header-background-image); + background-repeat: repeat; + color: var(--color-contrasted-text); +} + #title h1 { - color : #E9E9E9; + color : var(--color-contrasted-text); } #title h2 { - color : lightgrey; + color : var(--color-contrasted-text); } + +/* HEADER NAVBAR */ #headermenu .navbar-search .icon { background-color: transparent; background-position: -400px 0px; } +#header-clear { + background-position: -400px 0px; +}#headermenu .dropdown-menu > li > a #headermenu .btn-locate-clear.icon { background-color: transparent; @@ -15,8 +53,7 @@ margin-top: 5px; } #headermenu .dropdown-menu { - background-color: #4A4A4A; - background-color: rgba(0,0,0,0.7); + background-color: var(--color-background-primary); } #headermenu .dropdown-menu:after { border-bottom: 6px solid rgba(0,0,0,0.5); @@ -31,10 +68,19 @@ border-right: 7px solid transparent; border-bottom: 7px solid rgba(0,0,0,0.2); } -#headermenu .dropdown-inner .items li > a { - color: white; +#headermenu .dropdown-inner .items li > a, +#headermenu .dropdown-menu > li > a { + color: var(--color-text-primary); +} +#headermenu .dropdown-inner .items li > a:hover, +#headermenu .dropdown-menu > li > a:hover, +#headermenu .dropdown-inner .items li > a:focus, +#headermenu .dropdown-menu > li > a:focus +{ + color: var(--color-contrasted-text); } +/* HEADER NAVBAR */ .navbar .nav .metadata .icon { background-position: -125px 0px; } @@ -93,6 +139,15 @@ background-position: -300px 0px; } +/* MAP MENU (VERTICAL MENU ON THE LEFT) */ +#mapmenu { + background: var(--color-dark-gray-elements); +} +#mapmenu .nav-list > li.edition.edition-pending:not(.active) #button-edition { + background-color: var(--color-contrasted-elements-light); +} + +/* ICONS */ #content .ui-icon { background-image : url(images/sprite_menu.png); } @@ -104,15 +159,157 @@ background-position : 0px -96px; } + +/* DOCKS (PANELS) */ + +/* Background for docks */ +#dock, +#mini-dock, +#bottom-dock, +#right-dock, +#sub-dock, +.lizmapPopup.olPopup, +#map-content .lizmapPopup { + background-color: var(--color-background-primary) !important; +} + +/* Metadata panel */ #metadata { - background-color:#EFEFEF; - color:#333; + background-color: var(--color-background-primary-content) !important; +} + +/* White background for content div */ +#toolbar div.menu-content, +#menu div.menu-content, +#dock div.menu-content, +#sub-dock div.menu-content, +#mini-dock div.menu-content, +#right-dock div.menu-content, +div.modal div.menu-content, +#bottom-dock div.bottom-content { + background-color: var(--color-background-primary-content); +} + +/* Thin border for docks */ +#dock, +#mini-dock, +#sub-dock { + border: 1px solid var(--color-contrasted-elements); +} + +/* Dark text in dock, right-dock, bottom-dock main titles */ +#dock-tabs>li>a, +#right-dock-tabs>li>a, +#bottom-dock-tabs>li>a { + color: var(--color-text-primary); +} + +/* Dark border bottom for docks titles */ +#dock>div>ul.nav.nav-tabs, +#mini-dock>div>ul.nav.nav-tabs, +#right-dock>div>ul.nav.nav-tabs, +#bottom-dock>div>ul.nav.nav-tabs, +#mini-dock h3, +#sub-dock h3, +.dock-subtitle { + border-bottom: 1px solid var(--color-contrasted-elements); +} + +/* Dark text for dock main title */ +#toolbar h3, +#menu h3, +#dock h3, +#sub-dock h3, +#mini-dock h3, +#right-dock h3, +div.modal h3, +.dock-subtitle { + color: var(--color-contrasted-elements); +} +/* Icons from glyphicons +For light theme, use the dark icons +*/ +#dock .icon-white, +#mini-dock .icon-white, +#right-dock .icon-white, +#bottom-dock .icon-white { + filter: invert(1); +} + +/* Docks title icons must also be dark */ +#nav-tab-switcher a::before { + background-position: -50px 0px; +} + +#nav-tab-metadata a::before { + background-position: -100px 0px; +} + +#nav-tab-edition a::before { + background-position: -450px 0px; +} + +#mini-dock .locate .icon { + background-position: -150px 0px !important; +} + +#mini-dock .btn.btn-locate-clear { + background-position: -850px 0px !important; +} + +#dock .baselayer .icon { + background-position: -700px 0px !important; } -#metadata h2{ - color:#333; +#nav-tab-filter a::before { + background-position: -400px 0px; } +#mini-dock .measure .icon { + background-position: -250px 0px !important; +} + +#mini-dock .geolocation .icon { + background-position: -300px 0px !important; +} + +#mini-dock .tooltip-layer .icon { + background-position: -750px 0px !important; +} + +#mini-dock .print .icon { + background-position: -350px 0px !important; +} + +#mini-dock .permaLink .icon { + background-position: -650px 0px !important; +} +#mini-dock #action div.action h3 span.icon { + filter: invert(0); +} +#sub-dock .sub-metadata h3 .icon { + background-position: -100px 0px; +} + +#dock #cadastre h3 .icon { + background-image: url(images/cadastre-icon-dark.png) !important; + background-position: 0 0; +} + + +/* BOTTOM DOCK */ +/* bottom-dock top border to separate from the map */ +#bottom-dock { + border-top: 1px solid var(--color-contrasted-elements-light); +} +/* Bottom-dock content : remove borders +& add a line under the bottom dock main title */ +#bottom-dock div.bottom-content { + border: none; + border-top: 1px solid var(--color-contrasted-elements) !important; +} + + #menu { background : #F0F0F0; } @@ -257,6 +454,11 @@ Timemanager border : solid 1px rgb(251,216,80); } +/* LAYER TREE aka SWITCHER */ +lizmap-treeview input[type="checkbox"], +#filter input[type="checkbox"] { + accent-color: var(--color-contrasted-elements); +} #switcher tr.liz-state-disabled span { color:#AAA; } @@ -290,22 +492,33 @@ Timemanager border : solid 1px #DDD; border-left : none; } +lizmap-treeview .icon-info-sign { + border: 1px solid var(--color-contrasted-elements-light); + background-color: var(--color-contrasted-elements-light); +} -/*navbar*/ -#navbar div.slider{ - background : #C81F2D;/* #0081C2; */ - border : solid 1px white; + +/*navbar*//* Navigation bar button color */ +#navbar button.btn { + background-color: var(--color-contrasted-elements); } -#navbar div.slider span{ - background : black; - border : solid 1px black; +/* Navigation bar active button color */ +#navbar button.btn.active { + background-color: var(--color-dark-gray-elements); +} +#navbar div.slider { + background: var(--color-dark-gray-elements); +} +#navbar div.slider span { + background: var(--color-dark-gray-elements); + border: solid 1px var(--color-dark-gray-elements); } #navbar button.ui-button-icon-only{ - background : #0081C2;/* #CE1F2D;*/ + background : var(--color-contrasted-elements); border : solid 1px white; } #navbar button.ui-state-select{ - background-color : #3A3C3D; + background-color : var(--color-dark-gray-elements); } #navbar .ui-state-default .ui-icon { background-image : url(images/sprite_20.png); @@ -379,9 +592,13 @@ Timemanager #attribution-box { background-color : rgba(255,255,255,0.7); } +/* Overview map rectangle */ +.ol-overviewmap-box { + border: 2px dotted var(--color-contrasted-elements); +} - +/* ATTRIBUTE TABLE */ #attribute-table-panel { opacity:0.5; width:65%; @@ -395,6 +612,27 @@ Timemanager height: 100%; width:100%; } +/* ATTRIBUTE DOCK TABS (AT THE TOP) */ +#attributeLayers-tabs > li > a { + padding: 5px; + margin: 5px; +} +#attributeLayers-tabs > li.active > a, +#attributeLayers-tabs > li > a:hover { + border: 1px solid transparent; + border-radius: 5px; + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} +/* The first "Data" tab must not be displayed as a button */ +#nav-tab-attribute-summary a, +#nav-tab-attribute-summary a:hover, +#nav-tab-attribute-summary.active a { + color: var(--color-text-primary); + background-color: transparent; + background: none; + border: none; +} #attribute-table-panel h3 { background: none repeat scroll 0% 0% #2B2B2B; @@ -432,8 +670,31 @@ Timemanager .attributeLayers-layer-div span.attribute-layer-msg.failure { color:red; } +/* Child attribute tables tabs buttons */ +.tabbable.attribute-layer-child-content ul li a { + cursor: pointer; + padding: 5px; + margin: 5px; + /* font-size: 1em; */ + border: 1px solid transparent; + border-radius: 5px; + background-color: var(--color-contrasted-elements-light); + color: var(--color-text-primary); + box-shadow: none; + text-shadow: none; +} +.tabbable.attribute-layer-child-content ul li a:hover, +.tabbable.attribute-layer-child-content ul li.active a { + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} +/* RIGHT-DOCK */ +#right-dock { + border-left: 1px solid var(--color-contrasted-elements); +} + .alert-info { background-color : #3a3c3d; border-color : #fbfbfb; @@ -485,6 +746,39 @@ Timemanager background-position: 0 -96px; } + + +/* POPUP */ +/* Background of the popup div */ +#dock div.lizmapPopupDiv, +#mini-dock div.lizmapPopupDiv, +#right-dock div.lizmapPopupDiv, +#bottom-dock div.lizmapPopupDiv { + background-color: var(--color-background-primary-content) !important; +} +/* Popup layer title */ +h4.lizmapPopupTitle { + color: var(--color-text-primary-content) !important; +} +.lizmapPopup.olPopup .lizmapPopupContent h4, +#map-content .lizmapPopupContent h4, +#popupcontent .lizmapPopupContent h4 { + color: var(--color-text-primary-content) !important; +} +/* Popup content */ +.lizmapPopup.olPopup .lizmapPopupTable, +#map-content .lizmapPopupTable, +#popupcontent .lizmapPopupTable, +#liz-atlas-item-detail .lizmapPopupTable { + width: 100%; +} +#dock div.lizmapPopupDiv, +#mini-dock div.lizmapPopupDiv, +#right-dock div.lizmapPopupDiv, +#bottom-dock div.lizmapPopupDiv { + padding: inherit; +} + /*Popup OpenLayers*/ .lizmapPopup.olPopup, #map-content .lizmapPopup{ @@ -496,8 +790,8 @@ Timemanager .lizmapPopup.olPopup .lizmapPopupContent h4, #map-content .lizmapPopupContent h4{ - color : white !important; - border-bottom: 1px dashed white; + color: var(--color-text-primary-content) !important; + border: none; } /* .lizmapPopup.olPopup .lizmapPopupTable, @@ -514,9 +808,64 @@ Timemanager #map-content .lizmapPopupTable th.left{ border-right: 1px solid #C9C9C9 !important; } +/* Popup title of children popup & dataviz plots */ +.lizmapPopup.olPopup .lizmapPopupDiv .lizmapPopupChildren h4, +#map-content .lizmapPopupDiv .lizmapPopupChildren h4, +#popupcontent .lizmapPopupDiv .lizmapPopupChildren h4, +.lizmapPopupChildren h4 +{ + border-bottom: 1px solid lightgray; + color: var(--color-text-primary-content) !important; + margin: 0px; + font-size: 0.9em; + padding: 5px +} -#edition-modal form { - margin: 0; +/* Popup tables */ +.lizmapPopup.olPopup .lizmapPopupTable, +#map-content .lizmapPopupTable, +#popupcontent .lizmapPopupTable, +#liz-atlas-item-detail .lizmapPopupTable, +div.attribute-layer-feature-panel .lizmapPopupTable +{ + background-color: var(--color-background-primary-content); + border: 1px solid var(--color-contrasted-elements); +} + +.lizmapPopup.olPopup .lizmapPopupTable thead, +#map-content .lizmapPopupTable thead, +#popupcontent .lizmapPopupTable thead, +#liz-atlas-item-detail .lizmapPopupTable thead, +div.attribute-layer-feature-panel .lizmapPopupTable thead +{ + color: var(--color-contrasted-text); + background-color: var(--color-contrasted-elements); +} + +.lizmapPopup.olPopup .lizmapPopupTable th, +#map-content .lizmapPopupTable th, +#popupcontent .lizmapPopupTable th, +#liz-atlas-item-detail .lizmapPopupTable th, +.lizmapPopup.olPopup .lizmapPopupTable td, +#map-content .lizmapPopupTable td, +#popupcontent .lizmapPopupTable td, +#liz-atlas-item-detail .lizmapPopupTable td, +div.attribute-layer-feature-panel .lizmapPopupTable td +{ + border-right: 1px solid var(--color-contrasted-elements); + border-left: 1px solid var(--color-contrasted-elements); +} + + + +/* Feature toolbar */ +lizmap-feature-toolbar div.feature-toolbar { + margin-bottom: 3px; +} +lizmap-feature-toolbar button.btn:hover, +.attribute-layer-action-bar button.btn:not(.dropdown-toggle):hover { + background-image: none; + background-color: var(--color-contrasted-elements); } /*dialog wait*/ @@ -550,3 +899,108 @@ Timemanager #home #projects h2 { color: white; } + +/* EDITING FORMS */ +#edition-modal form { + margin: 0; +} +edition-form-container > div > h3 { + font-size: 1.5em; +} +.edition-tabs .nav-pills > li > a { + background-image: none; + background-color: var(--color-contrasted-elements-light); + color: var(--color-text-primary); +} +.edition-tabs .nav-pills > li > a:hover, +.edition-tabs .nav-pills > li.active > a, +.edition-tabs .nav-pills > .active > a, +.edition-tabs .nav-pills > .active > a:hover, +.edition-tabs .nav-pills > .active > a:focus { + background-color: var(--color-contrasted-elements); + color: var(--color-contrasted-text); +} + +/* editing forms tabs */ +#edition ul.nav-tabs { + border-bottom: 1px solid var(--color-contrasted-elements); +} +#edition .nav-tabs > li > a { + color: var(--color-text-primary); + padding: 5px; + border: none; +} +#edition .nav > li > a:hover, +#edition .nav > li > a:focus { + text-decoration: none; +} +#edition .nav-tabs > li > a:hover, +#edition .nav-tabs > li > a:focus { + background: none; + border: none; + border-bottom: 3px solid var(--color-contrasted-elements); + color: var(--color-text-primary); + cursor: pointer; +} + +#edition .nav-tabs > li.active > a, +#edition .nav-tabs > li.active > a:hover, +#edition .nav-tabs > li.active > a:focus { + background: none; + border: none; + border-bottom: 3px solid var(--color-contrasted-elements); + color: var(--color-text-primary); + cursor: auto; +} +#edition div.tab-pane { + border-left: 1px solid var(--color-contrasted-elements); + border-right: 1px solid var(--color-contrasted-elements); + border-bottom: 1px solid var(--color-contrasted-elements); + padding: 5px; + padding-bottom: 10px; + margin-bottom: 5px; +} +#edition div.tab-pane.attribute-layer-child-content { + border: none; +} +#edition #tabform { + border: none; +} + +#edition legend { + color: var(--color-text-primary); + border-bottom: none; + padding: 5px; + width: unset; + max-width: 100%; + margin-bottom: 0px; +} + +#edition fieldset { + padding: 10px; + padding-top: 0px; + margin: 0px 5px; + border: 1px solid var(--color-contrasted-elements-light); + border-radius: 5px; + background: rgba(255, 255, 255, 0.2); +} + + +/* ATLAS */ +/* White background for Atlas content */ +#liz-atlas-item-detail { + background-color: var(--color-background-primary-content); + color: var(--color-text-primary-content) +} +/* Atlas tool layer abstract */ +#liz-atlas-item-layer-abstract { + color: var(--color-text-primary-content); +} + + +/* DATAVIZ */ +/* MUST BE SET IN DATAVIZ.CSS FILE */ +/* Dataviz plot title */ +.text { + color: var(--color-text-primary); +} From b7626c232c147429f0b432d498dc86bb7194da89 Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Fri, 24 Nov 2023 17:31:35 +0100 Subject: [PATCH 4/5] Editing - Prevent the user from quitting Lizmap when an editing session is active --- assets/src/legacy/edition.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/assets/src/legacy/edition.js b/assets/src/legacy/edition.js index 47823c7ae3..4205ba2cfc 100644 --- a/assets/src/legacy/edition.js +++ b/assets/src/legacy/edition.js @@ -1,5 +1,20 @@ var lizEdition = function() { + /** + * Prevent the user from quitting the page + * when and editing session is active. + * + * @param {Event} event + */ + const beforeUnloadHandler = (event) => { + if (lizMap.editionPending) { + event.preventDefault(); + event.returnValue = ''; + } + } + window.addEventListener('beforeunload', beforeUnloadHandler); + + function FeatureEditionData(layerID, feature, relation) { /** @var {string} QGIS layer id */ this.layerId = layerID; @@ -1005,6 +1020,7 @@ OpenLayers.Geometry.pointOnSegment = function(point, segment) { }, 'geolocation.position' ); + } else { $('#edition').parent().remove(); $('#button-edition').remove(); From e573cbdaf6632e03da87ff3ed7394240a39d9de5 Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Tue, 28 Nov 2023 17:59:38 +0100 Subject: [PATCH 5/5] Minor CSS fixes --- lizmap/www/themes/default/css/main.css | 1 - lizmap/www/themes/default/css/map.css | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lizmap/www/themes/default/css/main.css b/lizmap/www/themes/default/css/main.css index a3fe26c803..6b35a9575b 100644 --- a/lizmap/www/themes/default/css/main.css +++ b/lizmap/www/themes/default/css/main.css @@ -78,7 +78,6 @@ div.jforms-submit-buttons { /* Form submit buttons */ div.jforms-submit-buttons.form-actions .btn{ transition: none; - background: none; border: 1px solid transparent; box-shadow: none; text-shadow: none; diff --git a/lizmap/www/themes/default/css/map.css b/lizmap/www/themes/default/css/map.css index 532ca1991d..f33b7d1eaf 100644 --- a/lizmap/www/themes/default/css/map.css +++ b/lizmap/www/themes/default/css/map.css @@ -44,8 +44,10 @@ background-position: -400px 0px; } #header-clear { - background-position: -400px 0px; -}#headermenu .dropdown-menu > li > a + background-position: -875px 0px !important; +} + +#headermenu .dropdown-menu > li > a #headermenu .btn-locate-clear.icon { background-color: transparent; @@ -1001,6 +1003,6 @@ edition-form-container > div > h3 { /* DATAVIZ */ /* MUST BE SET IN DATAVIZ.CSS FILE */ /* Dataviz plot title */ -.text { +#dataviz .text { color: var(--color-text-primary); }