From c2ba8b05fdd2b7c9ec6fa3e32ce0c7ac4a3e404f Mon Sep 17 00:00:00 2001 From: canglan Date: Mon, 27 Apr 2026 03:02:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=89=8B=E6=9C=BA=E7=AB=AF=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/admin/dashboard.php | 2 +- frontend/assets/css/admin.css | 150 +++++++++++++- frontend/assets/css/style.css | 319 ++++++++++++++++++++++++++++- frontend/assets/icons/icon-192.png | Bin 0 -> 7727 bytes frontend/assets/icons/icon-512.png | Bin 0 -> 29375 bytes frontend/assets/icons/icon.svg | 11 + frontend/includes/header.php | 4 +- frontend/index.php | 5 +- 8 files changed, 478 insertions(+), 13 deletions(-) create mode 100644 frontend/assets/icons/icon-192.png create mode 100644 frontend/assets/icons/icon-512.png create mode 100644 frontend/assets/icons/icon.svg diff --git a/frontend/admin/dashboard.php b/frontend/admin/dashboard.php index aa23256..8372391 100644 --- a/frontend/admin/dashboard.php +++ b/frontend/admin/dashboard.php @@ -35,7 +35,7 @@ include __DIR__ . '/../includes/header.php';
操行分排行榜
-
+
显示前 % 的学生 diff --git a/frontend/assets/css/admin.css b/frontend/assets/css/admin.css index 647063b..d4ec2ed 100644 --- a/frontend/assets/css/admin.css +++ b/frontend/assets/css/admin.css @@ -128,6 +128,13 @@ height: 18px; cursor: pointer; } +/* 扣分类型按钮组 */ +.deduction-types { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + /* 考勤学生方格网格 */ .student-grid { display: flex; @@ -199,14 +206,155 @@ color: #4338ca; } +/* ========== 响应式 — 平板 (≤768px) ========== */ @media (max-width: 768px) { .student-cell { width: calc(100% / 4 - 10px); + min-height: 54px; + font-size: 13px; + } + + .batch-bar { + flex-direction: column; + gap: 8px; + text-align: center; + } + + .filter-bar { + flex-direction: column; + gap: 10px; + padding: 12px; + } + + .filter-group { + min-width: 100%; + } + + .attendance-toolbar { + gap: 8px; + } + + .attendance-toolbar .status-group { + flex-wrap: wrap; + gap: 6px; + } + + .attendance-toolbar .status-btn { + padding: 8px 14px; + font-size: 13px; + min-height: 40px; + } + + .assignment-header { + flex-direction: column; + align-items: flex-start; + } + + .import-area { + padding: 20px; } } +/* ========== 响应式 — 手机 (≤480px) ========== */ @media (max-width: 480px) { .student-cell { - width: calc(100% / 3 - 10px); + width: calc(100% / 3 - 8px); + min-height: 50px; + font-size: 12px; + padding: 6px 2px; + border-radius: 6px; + } + + .student-cell-name { + font-size: 12px; + } + + .student-cell-no { + font-size: 10px; + } + + .student-grid { + gap: 6px; + margin: 10px 0; + } + + .batch-bar { + padding: 10px 12px; + border-radius: 6px; + } + + .filter-bar { + padding: 10px; + border-radius: 6px; + gap: 8px; + } + + .filter-group input, + .filter-group select { + font-size: 16px; /* 防止 iOS 自动缩放 */ + padding: 10px 8px; + min-height: 40px; + } + + .attendance-toolbar { + flex-direction: column; + align-items: stretch; + gap: 8px; + } + + .attendance-toolbar .form-group { + width: 100%; + } + + .attendance-toolbar .form-group input, + .attendance-toolbar .form-group select { + font-size: 16px; + } + + .attendance-toolbar .status-group { + display: flex; + flex-wrap: wrap; + gap: 6px; + justify-content: space-between; + } + + .attendance-toolbar .status-btn { + flex: 1 1 calc(33% - 6px); + min-width: 0; + text-align: center; + padding: 10px 8px; + } + + .attendance-toolbar input[type="text"], + .attendance-toolbar input[type="number"] { + font-size: 16px; + width: 100% !important; + min-width: 0 !important; + } + + .attendance-toolbar .btn { + width: 100%; + } + + .status-select { + font-size: 16px; /* 防止 iOS 自动缩放 */ + padding: 8px; + min-height: 40px; + } + + .import-area { + padding: 16px; + } + + .preview-table { + max-height: 200px; + } + + .assignment-card { + margin-bottom: 12px; + } + + .assignment-title { + font-size: 14px; } } diff --git a/frontend/assets/css/style.css b/frontend/assets/css/style.css index ca77119..24d91b5 100644 --- a/frontend/assets/css/style.css +++ b/frontend/assets/css/style.css @@ -622,45 +622,346 @@ tr:hover { color: #667eea; } -/* ========== 响应式 ========== */ +/* ========== 触控友好 ========== */ +.btn, +.btn-login, +.btn-logout, +.status-btn, +.nav-item { + min-height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.form-group input, +.form-group select, +.form-group textarea { + min-height: 44px; +} + +/* ========== 响应式 — 平板 (≤768px) ========== */ @media (max-width: 768px) { .container { padding: 0 16px; } - + .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; } - + th, td { padding: 8px; font-size: 12px; } - + .card { padding: 16px; } - + .nav { padding: 0 16px; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; } - + .nav::-webkit-scrollbar { + display: none; + } + .nav-item { padding: 10px 14px; font-size: 13px; + white-space: nowrap; + flex-shrink: 0; } - + .action-bar { flex-direction: column; align-items: stretch; } - + .search-bar { width: 100%; } - + .search-bar input { flex: 1; } + + .header { + padding: 10px 16px; + flex-wrap: wrap; + gap: 8px; + } + + .header h1 { + font-size: 16px; + } + + .login-container { + margin: 40px auto; + padding: 24px; + } + + .modal-content { + width: 92%; + max-height: 85vh; + } + + .table-wrapper { + -webkit-overflow-scrolling: touch; + } + + .stat-value { + font-size: 28px; + } + + .pagination a, .pagination span { + padding: 8px 10px; + min-height: 36px; + } + + .action-buttons { + width: 100%; + } + + .action-buttons .btn { + flex: 1; + min-width: 0; + } +} + +/* ========== 响应式 — 手机 (≤480px) ========== */ +@media (max-width: 480px) { + body { + font-size: 13px; + } + + .header { + flex-direction: column; + align-items: flex-start; + padding: 8px 12px; + } + + .header-info { + width: 100%; + justify-content: space-between; + } + + .header h1 { + font-size: 15px; + margin-bottom: 4px; + } + + .user-name { + font-size: 13px; + } + + .btn-logout { + padding: 6px 12px; + font-size: 12px; + } + + .container { + padding: 0 10px; + margin: 12px auto; + } + + .card { + padding: 12px; + border-radius: 8px; + margin-bottom: 12px; + } + + .card-title { + font-size: 15px; + margin-bottom: 12px; + padding-bottom: 8px; + } + + .stats-grid { + grid-template-columns: repeat(2, 1fr); + gap: 8px; + } + + .stat-card { + padding: 12px 8px; + border-radius: 8px; + } + + .stat-value { + font-size: 24px; + margin: 6px 0; + } + + .stat-label { + font-size: 12px; + } + + .score-number { + font-size: 48px; + } + + /* 登录页 */ + .login-container { + margin: 20px 12px; + padding: 20px 16px; + border-radius: 12px; + max-width: 100%; + width: auto; + } + + .login-header h1 { + font-size: 20px; + } + + .login-header p { + font-size: 13px; + } + + .login-form input { + padding: 14px 12px; + font-size: 16px; /* 防止 iOS 自动缩放 */ + } + + .btn-login { + padding: 14px; + font-size: 16px; + } + + /* 导航 */ + .nav { + padding: 0 8px; + } + + .nav-item { + padding: 8px 12px; + font-size: 13px; + } + + /* 表格 */ + th, td { + padding: 6px 8px; + font-size: 12px; + } + + /* 模态框 */ + .modal-content { + width: 100%; + max-width: 100%; + border-radius: 12px 12px 0 0; + max-height: 90vh; + position: fixed; + bottom: 0; + left: 0; + } + + .modal { + align-items: flex-end; + } + + /* 按钮 */ + .btn { + padding: 10px 14px; + font-size: 13px; + } + + .btn-sm { + padding: 6px 10px; + font-size: 12px; + min-height: 36px; + } + + /* 表单 */ + .form-group input, + .form-group select, + .form-group textarea { + font-size: 16px; /* 防止 iOS 自动缩放 */ + padding: 10px 12px; + } + + /* 记录项 */ + .record-item { + flex-wrap: wrap; + gap: 4px; + padding: 10px 0; + } + + .record-reason { + margin: 0 8px; + flex: 1 1 100%; + order: 3; + font-size: 13px; + } + + .record-time { + font-size: 11px; + } + + /* 搜索栏 */ + .search-bar { + flex-direction: column; + gap: 8px; + } + + .search-bar input { + width: 100%; + } + + /* 操作栏 */ + .action-buttons { + flex-wrap: wrap; + gap: 8px; + } + + .action-buttons .btn { + flex: 1 1 calc(50% - 8px); + min-width: 0; + } + + /* 分页 */ + .pagination { + gap: 4px; + flex-wrap: wrap; + } + + .pagination a, .pagination span { + padding: 6px 10px; + font-size: 12px; + } + + /* 底部 */ + .footer { + padding: 16px 12px; + } + + /* 状态标签 */ + .status-badge { + padding: 3px 8px; + font-size: 11px; + } + + /* Toast */ + .toast { + left: 12px; + right: 12px; + bottom: 12px; + transform: none; + font-size: 13px; + padding: 10px 16px; + border-radius: 8px; + animation: fadeInUpMobile 0.3s ease; + } + + @keyframes fadeInUpMobile { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } + } } \ No newline at end of file diff --git a/frontend/assets/icons/icon-192.png b/frontend/assets/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..73680cc7d83da2cb757a9654ee6294bb9aa0ba02 GIT binary patch literal 7727 zcmY*e2RNJU_m0&VAF)bNf)0Dtsu_yvLXA?ZT56A|5j%voMu)FOwN|uRqe`hg6K&DY zRwH&|Z;6>8;{WRR`>!ik@?J^a=RD_q&i$No-{(oZZEDQUD#!`~f!MEKGqeD%*poN& zDd5v$!UqgoPC4H+HUu4?ymFfgQa~W#x$B1dR-swz*zU^?W$lbdy_Y`SRA zqn*u6H_W`IrOpXqrG@n+6Te>D*_rt0d!+p73{R~kBa+p&faeUdKq^YF<=iA<>Af*j zr+A2SL_$ki_w$%vx=&fNu2c<&$kM(B-cwewF59hRaELzMdp#4{ub@B4 zI_4h5ghXK!O%{ThN$$}eRfg$j50+szcTitp&dX27Q~I%XCseYD>r&K9(N zrTI!c26)&U^{@rIDGt)ClZxY)swQqpzCSLBK7lzVcxJ*Ckj_&w`3aRwh!}fhc?7Fw zC5Of$xql8ylw+kX1ToOV{%%yPmg{k#E;ah*Ut_L4RlD6&(z?`F!A#Z7pw2cKq3~IL z1cF)G=hTv%hV7oT)_f1<2 z#g6)2La&v&t?&Em5ILP1wt$zQ*79FhP?)k%xH&<+Kq!dB5T5ENaD4B;CZ9p_Q|W2S z_P^nr%zX^oMb{5cAI=^kl845|SROx5Ji)mH3P0gjuP8|{%kbTO+z#6rtYhbkG4Y_I zkG}sOhr%iPE~D>ri25tM*WNE4UOsrHzQRp;;TwL1k>_&p-t5>NLs|Xl{qa(u4opE^I@Jb9?(K_xngJ7Q#$LuIIBE@F78;;%$Ga*D)e% z@QI-4ZyzqNdFm6u;oxK6np?T0rKuZ*FFx_MUf_dc0ux+2_x6{#Dcycf(o{*&HD+E4 zYU+5Nczq=G%~MG^cGr~|rS&`+mgAA~3(wC?Z`Wr;j%&Iel8rn)mcBQc(ntSYDogcX zW}_a(K~;2g?%_ix)Y=M;w|cYfTR)}0RH5+t$-E(cdjEbv%!~l}J^vW`o5z_EnM+)x zJ_!abdYXmQ6vgfI*x5OANCC#=6{w&$Sac=Lfs~;YgP_#+?l;sQ9Lp{3?d3e@MZvD6 z3n2R*o4jl?2@wAQ(G|{Z@1bPKhc+}c3Eyu`YFfiD(gyEb3Z1CE)Eu0+ohrpw1tg_< z>NJ=%#kAu3nnxHJlOsZ0zO}_nh^}cLq^tJvbU)-5)+ik%-0eE$AS~*}Mn%=fPJ;*d zCzy~0@Tp+>@x9@37A=ys`{k^~S#5cfH}gj3z>}mwk-wVQ20PEwN0-Utr!Pp!NNplw zylHOQ{e}Buxs|eWMQl$})iGG~W+xanmqX7&HFd&ivJ3I$*ZvY0thjz&W$bBbsR-1O zGx2V!YwnPtINxTiiMuo|A_absrG z9U&A*w>CDa|M8de&eEKX=h1JoOzY(YyhZf+swDboF^8vY*8@KMfLw0dKhK@vp%P)3 zU??ljC2^(SW6SP+rAq3u_M($w*0#bKzdk~hlkQ!!`7%Xy{G~e4=xe&kwd7KW($|#Y zD+I7VjCuPa7bWFRuMQr2eAq35lk1&}qID`jyQ%vUT32$yz4(RHtKBjV7o*>$1)68! zE1y=Y9Y6C)5!T=~_8!ozlV+qnN0YCYVd4G*Kb<#R^WzrSS!MN(Y1uTSTv| zfy{}_RzT9~JyMV*LC#Wdv^*C`bI?A1*ltw$Pp^IP3j^7JZsGK6a|dixU1#Bq=?Un` zcACOM0vD_|*NM;F1`D~J&_Ru!S;@ou?QBvuklXJNj7Vs?2)Ro&1`GXI971A<+%2v` zbsE2rpKi-sv6#1jUoByYZ~B#^OnjLCapPz)hX#5qiyIL|;g{V#)U!NCZ~%HmhKdTm z>_kRud)Y?N*ek(^U`%?3B%eHg@1MxbSI7Vav+N|NhpIt}$ApT51`KeNf z-{}gsJA&ZqPbJOGFKleqXMt%YWr&l3F-Z@e95SS)H$d0esBYve*nQed`e;E~Mh0`r z#WYJBo2!nF0<&#tg1zH`zS|3G*0S)2i!XchV6cYWmzEVSQLL3oNeNiu9@`8nzUB%u z)stc%*2=C9WUQXZv1xbW7hOWkF%((d@(KsP)M@anSCrSn3U|JjIQu9wf@o)^uVn?0 zgn5*c=d8ULBW+?J$MDKFWmfAzBXP3M6iLbxTgi}q7a8#w3*#ikA*N29rgSe-OG+MD zmyET~rzdY3`iuoJjt_U`IL_PdL5?qHzvh0nQOanSl65QPogREj-l(-_n+E(iPRv=r z2n14PZ(aZ|oVNXfY)Tx0tB8>zWUP8L-$}HBFJ9lz5hWF@H<394M_uzI#HV5lt3LFR|f0-?(7YVb3OAMX!>z}%T_Y0{(>|~3n_)u-0uZ*QiL(}nmmKJ z8YQ<|ES>4=^Lfd3RCRM{U3|&}N~MH}7D$m8GoL zy)49HFI(>$fHsBaAZOTg_iLGY_sr(YQ!h}k13kLm55I(wl)3`t5)ds=(6 zAr%#i|Hi965h*?3W_2*NUhcadu3m&C7D$cLF(T3Es2Eu8*4HH7Xh8R_cU-BM2n|4m7Ekvv%dXDRdOpUZFUB}j{j=mCI^y% zf_7zBfxgsO`Cy)T0RrC(qVKebJnmqbh#ViB%e{=kZx(Y>=wwmRxrE*f3;&iU=W1tj zikcY~k(dv!?#Kwe=+qpKxVzQoh9ItxWHVI@o*vS0XPcwve|8PHB+H}lHYpD*8b{3u zL?P;(J6xsBZsN*r8NFlxTzKuOYzR(-!>6F)T+cZOd||kuKpAVY+@hG8D<4-GY1*5o4m)tBGhmzNd0!@|Aq%AUlF7%5i)&M9 zaI8bXVF+TUjFOHHm^3Na;ty;zD3ZIWbhu;ZhQ8N{I-1lz98}Z&3UeNoCNYFfvA!zh zp)kw@Z@tMM=ewtx^V#b-j6V8+AgZ9<&>3vzIJ!6`j@z5Vj{&6^>l;o^v>;eQ%RC8Vi@ zZR>=fY%IE}8!bFd+{nJ+dgnm}M)&Yznt*aP!`$#!t*&P`L;8mW$wTuw;Il99nqtn{ zMj(PoBpBRz!?w!dz-IQ0YW{OGH8nPBbB06n7|A+ehZ}|WjOQ>4+o+qIX!Lk3h92NJ zo3OQniSEfJ-*Wj~bo#6=@BF?yVryBVB&;TFk@;_p3zvwuOH`pHIzQ1kVdt^uUUnHS zx~q>1Xom4ne@MKkJQt;VQ%JqCEYMwo=OUxo%dpv@i`*>TaHo-O0r%mu03(Af9%CjS znO-hYAM;-vLux*>kFD<6q(L_7Ke3DAcL|UL9BDb<8qbld+PHUv$9w8}bFCMyhXb+h zL%zN^Y5o3hvLo!h|CabjvFvemk2MQ*%K00i7O3Gs1T8QTR_-5+0||Pmy*1UF8{>zb zK1*9|{Iw;#NjPiO-;-&gA{B|ewyCL)Z{Kir3K!ypzfmAXJR8*vUTw0k!aALy*6l9i zaza8zN2>RWNee+pk`VQv%pkjy5ee^KKEp?efWSWL1_@UhJb!jlGER8=O~7d~3WmNI zcv1(~l;WV-CwZX#UmEuw0=sjL4KjLLBrK ze@obFX6gcBfC+`4)4e|YQ1;-G&)|KXu@1ME5qg=y5j<$8xJLa32QHd~ec%4`|pbs?p|>XP$ADKqUYfoc;v ztwG5t<8&-ht^HX!BQmgI`HB<3h_f7js2>N&%Ei0*l)yhdGLz7%srfX;^*PZ{)(;cH z_exwQ#pTMRVs$j~=S2R^bR`Uyc;I;}r-|+SpS3s$98->RQw0rG8AZ-#rR;CSvfTP2 z^yX1QyKl9x#>_9JK+}>slXQ6(Kqu@D`~~~C0Z>k0$)3=#PWQOnCZu{4>J1xsd}xFF z;X7vPni$R#bFUKSPfL-&ODn?Er3o@H;;P9}6Cqo-f^}Z-(e6KOZZqX;<8!>Euqc^q zVV!sNGp{)-7KSw$m}nr!rg$hlhFgjRebJy3*n4(klSWDgUz*>U%*heSWMAdbq%JtB zXdW`1LBaHF@B}daWWkLYXypZ|${oAc2NkMC9zUm;qR_0?|&Xy5lQv^$QEk2aUck;HHr>SVWMdO>NKXSGYO%NMBhm{oTo z0X%S0Lzi*!!k>8^wrr*pE;sLcxlBnkcE{&^Ii96!|EAm{(vm7L6c)rnb=!`IP8f&* z#K;L6vSjOy?kXC{g0|6uT$I_h#-oBXX7S;lPtzKT2U(~Ge0;+(;hsKLG5CJztKK8t6UnW?vTS42cU zIj2W}49|mM9^?}))V$F*;5Otx6r93hoK=FXFMpRjETZ^$4sZRnWWwaf1|r@*EbOs2 z{9VgF{!E;!6bhDHDoSaATSQJ7(npV_#%{}>ZJoC<-Er6v(LLije^ZOSo^{+BP!szF z)qRyXjU<(aEx5(x`8F-LOW{5nifky1I*FlhoH+LIo)Dm0b$wmuA2dg_8eTLJSV*)w zkC{XINAvf&MR$btL+J;At z<@bJB_zg#2345|?+4&Yxn!KB@0J2wCS9T4rdi2is$LI8#?S3e^V2qE#mPp>v0p=BX zU7(F`au!!!91Q&cno-i)ol{HRFWBO#`TYy1d=*_6pg# z=@GiOF;ec_FR)Ibkv-L{Y*gB&Ta8bYyD{W=zfa;kceU8h22)ju(^{YHGVa<=PaVBI%CYy-l8QSaLiZ1P11y|Kn5eFwd14Pg?7=5zk{^@3mp4Q^c??EoPQ>5$5(@9b0LbSqfDfDa9mNA&lONfsp{@DAdpNob z&m&3#uWF8w@+|pV053|8Nem98?($MP@3Q5*xJuzf4Jsq;z9R$ON&U*4c*#K>a3A*H z+s`{I-|rEteq7c*ZPWL+TON=oN#67<|uX?a{5&VL+P5=AuLuk0AnH)>Q-F0sLuuDu z8JYMh4XL&cW?6L=D!Jaua=30}^z;1Vg&&jJWcp4poSOwb#Cg)aO1gK{;|)T=6sYHn(;w~Oj4!QMW(^2!+&?FT6M~;$5amk?zz5((kg>1TRn8oUJxt7QC!>)1*$GDHjG9r5gxllm#<&>hJe#u(t~UbvU;Ws{Tox zVn0sy0 zP|iTNk{GN(n+AX2TS9!z!=gQ%2;?EvpVP+rnM{?ta*04wCgcF%1CCcsUe2VSg5{3O z=2nrfJDdh8tQkRl<&swbFUE?ZKj4KL6C=4FoouvrE^5q}--Gd8z&gBoRsacdgnJe$ z$o_w0<+0G)^;4`*cG{@_-(0d76~t22@1S5(7!|qjB8T?>GC; zN1kOu)}XQQ!4v#(2vT@{8Yo=(%phwUa5XPheJhb4V1)FTauc&heOO3_4fJkZ8B2h~ zPs!b&ze54SDgOr};L}u()`4a8I}ZPk4N+1VS1kd$`QQKXQ}rxANbWQQ-N|Rr-k&p? z%!MK(xc=8{OY&76Qs3_}%{5vZhw8zTCFinCrow6u^cRC&DqUoii|4XN$CU*SfUetBoBMYhu_~HDxTzOBL>h``YZ58#TV!?H9&CpIgk`O zq;D)VQWF#-ud!pP0u_8ScluokH|6A@LB>UN8t2{l><3Jl`5(`L_6>(hw{M?HAgWgT z65POHK?^HP&W@b5N!VJg7WxUIGX}-9CijfztE4kbo`6e^!;9j=%6F;-5~c~l{z%T= z<{N8fwTPQ%q=8K2oltmzo%t4cT=Rm{8^@#1`p$j#Aco< ze>|Z^GwOjX$z@849%IuM^Bw;|Znp{SbTDmyN~zhpPwIB5T$s<4kWPjM7EF)nv>}9? zin>mcp>TF;7T1srpn&rj9bI^Vyl)fdC;r6_E=rv0A7VXRAkj!F{x(CZgER&Wsl~l* z9A32)t(lCPZCLbd#YnxC0|IzYfZ^2f)iQX*{ZUo#zpk)W>k88atlOAnk^R=CHkDgw zS_B}HLw_i~y}~q%c~58F_$qqTiBeIQ{QBsqs<^|&$Q5RhfsPefy$fUkpzgB8L}Oy3 ziAfT);7#IJ4QI}N39ZkVIcqzD5>TFgDT0H(0esJmE)_w qH|{fH?(BQFKIr|b@Er#CW2mqy9SW!--;I4RX8!kMtM~ir_x+Fec#qy?p8L6%>%Ok@I5e6$XQ`pFDB& z0t`k6{*eyG%n1INacx=ze=uIr);bEKL4Un0N(_g=gkdL-YUsH>A1!iwy2~kIVmai? zyQ1Xzkj|k5qi5H(oQ<|}3Tm7`ht_(m!Qdod`E)W=u3N>9;5ObK<&x&8b?m&xqtfm6 z+qoW{k^eFOf-#@}E+IK3B_%(9uDyFXPBvLqw1>~3F8#fD8A7s^V z_k$kTt4AC)^e8Hd&%EL4rXq-Ha%$J~ZWZDCk;fs!R$`O;l>H@3$%E(do$yP&g6&_C zgd|T;Rl1*IH|`(D1Ch_m|zWNOjP~F^lqZvR6N`=ZX{plaEY#i*fQD0>&~Kq z>15JwDVRt8?Xf2n`FEC$G9~K*eW!`tZ!!nTnDZ={V<~aPeR-(l=s^RIorMJPY*RbwF*#2%wJSuA&5jiAE zS(eA6TTLDvAqQHOcrOKwc-*8g#BG_Q_T(U3Qd}N4k2ySVvKC%CpzpgEuRE}wNyz`~j z49iW)YJKj8mr?!!f^90oMef?S=ttb7gaM9_bXn! z$hnJh=*)djKg^pj(tH~;#@z83D^XhVwM0+uQdjr&9I4r&2@LIBN6)sGul2*(uqd4E z{QJkjI2VC=N7#6|P5^q8ZFZeWZpb*ojj7YkBs8r%xnx#m34q=PJDENy01= z5rnqX7w^95HM3zqT6cVkX^Ke^=)&a1<#g|+)ZXyJ<%$ud=lhP5+ZOIXPk%mIfY%bdwKeh_Rmc4-LjJW!$xqAljW3rIf3(VDhBJ@PxWV?VS|= zV|#W`-S|74>>b8t6<$yuCR~kwJIo71Uusj6j;{7Fcv$Q_|ZU^XTUpVUDb#emEsyN%OlXeZ|k2 zG0L%0&>rpMqo_KSl@dHBDib^3EZ6RhOuhmq#g8~k-sYn1!y>k7v0xl`5T(aYl50Gb zxTwx*rqID&uq6*v<)Na_dQz7Z45>K`;$ACHp@-=d;7?5j{EMT*vZlATi2m&#)IX(N8Uxs&JK zwbPSl`|QT@clC5{=cMxf_W_>xSb~HZ6ikxYFq8h4(z+2(H|c-j!q!N;^n3`lqKV~> z6Yz?Be>}fr7HTneTH2k%h8BpXEpl(yuVT4yOcItxzU!{-=`SmC9 z5xOpIf(^Q-;yrMS7aV#2IMtgh)R^qN0|S~ZG;&r>Q{9#%8#b(UTAQaVc8QC;?4|QZ zb4fZzc309I`X#~FApAWncM6)78ywh(tBNwIr4Y+jN$C03SBPxgVhM%cg~o{Y!Q1DCP)kJo}3liDK2 zq?o@?j&dtvUtuSC7WhKo)m%3H*%3msIv&hcS*`_n7?&ZotvB1*u<2M_Wq9sLm-X#1v_vtxor-F+4oA+m?}-e)_*d12i$KeWco|>sL?> zeBw>Hyf8y_&VVC~F2?*cIr_iv9Ty%wa_ADBCvvf-9<^}8v-E&bEM4y1v2mr$t(~{M z^ZdE~ax|CH8@3FO-1+dMxrH`5>bcn6qeS=6IZcdm=)Zj>GckR3$NopfN+)vv9LI5U zT7Ta$Nfb@AIBi>Z3UxWr^3F-)y5r&frc1u=@OkeWuUHG!{8RJP@ zUo)ZIC8+0(JlslzQugh?{Nd`kRIp>D&1J%!IF_ijmSazvxRG%C=e;@VWUW7&v31sC zW-9FAFFqz^uf{jXmf-hJg6ty4|DOqqxy<5*Z6_(x8vK{QGVx-o{Qgp&bir&f8bFM zx8S(uv-1UM{wTSohMUUk%Sn}u%@iU^PbC2_uft24Klt#(o5O z2R@dRBmGiRlkC2MRaQ-(B@hKWnE1^J{eAv(V}y0iLHResIdo5@ZN$&Wyy2$CFk{@@ z@PsRzcyzzqcTvhQHGNj%#Es{q`6jNB5NX;xI`)9oDP~o=uMcmMC7Chqb`Sr&{3ty# zz5PI5>JW;(CPzFzrH7`(Et+DgROl(7mm z=?S*3`{_A32Nf)w>7O1ar~CnNukO)Q87eWR^yoC6-%iD?1j(#I_thk}XsaJC`)`Mx zv<+C|OoAS*T*JFd7Z$p75|3_v12UNZ$Rqr4;6mwbr4(I{-CAqk_jAA8j(=vyU_N%s z60zdKe?8=IRvH)kp*;b76pVt|*Kl0sAhUXz{c^l8CH@cKe|6R6c%*%U;^Uip53`^1 zU@dV_Gy5liVaN|BhDV#lkaD*9ks=o!%ravh=|mhMyNh#EiaI0x>m0$HLfESomtoH; zn=}4Cqdq^(+2tSKi+{ABX|K%fG)uX#6&7Vm!juRR%I<%G`c+S*Pmh7wY8R&WeWC1U zV1x1fK!m24YaAv{+#^Lsic$76?xb8(yQ+#u_v(VU8za66G6*N>YQk^pLEnCQoqdS4xYeGl$O>Z8*e^BuJNe2>xcWCcxop_RbPPO zcq;FQrfqItp|kJ=v-)8!<(lOGYcf2*0R$-}y3+(}v{f}b{*P^m*o=YMn^?{qDJisu zJ(pvl1^vY)Z=fR zADvlJKo?4+(p1Pd+SJzeuUr1i7X?!Y(7dW{bKV~DxBY7tp}K{jqyV4;)lxRQ$j~yTV1Cn)1Vy3;W@|SiaLD2YV!M#SBmRRJXeq$_E!=nd6PVc5ffT&O$;)i>Qjwr+IDu2OE|Me6(?9X>AftBKT zGg!%1iEk!F5S+K?7lvUth$Mfyp$WnicrN<^*sLG!HIgWOi*r<7eLHmNs%A;q;Op85;A+DVCH+NMOu*%IZ0*}9~6 zV!U>i-cL?HNA+UFxZ;N*l~9TGU;1`ZEIUp)Sl1cTEPrI#&s9;73mVnB68+2h!y@D>-8N zs1`Z!P(;$`QZs3ukO2dEoG;hfob$jfwh*^&-mUa}LiE=G6Sn%I+DjN`DxK=Z(?2XI?MnU-WC{!jrpp`zKiBy6b8u-dzF^$O z>)s2t7`)*U?9GKAJ_UPtgGhnoX=JY`rR-U?-rRDsDg{2l3?oXjAHT?qDd)u7JCz|} zvb>3~Z#Syw)R{0Z7eiq)GjDtdr|`(`dJI592y1cOAM+`Y34Q_qbp7O0kiY|6GO3Te zr=p)8h?0r1<9n<{PY<8oLgmCzeLVmu)QzexMhl`S-d~O3!O1Ke@HOch5z#6L|7?L* zaV9aDylL$5Zts;C!twh2d$KogbRk+**w005VC7~Q2KG4sZ!(e@hhMjYu3yLdVC!7x*qbR{ zU>xrO<@sGN;r)c67zb6ofeuSTW}W+L-b}kd>3qyeg`G20fV08Mp_hHS%0W!O0Z`!T9lsZdx_tNd zS)MsV4oi9rtnjFb>j=U@yN^Tbhnmnljggc3s(j;JO5g{Zh{$WJx7ZJNG(G@jBK%5) zF2m|Pw^Z)sm}>5X2nl2Tg~_ATLO+bvfprgb7C7LB5bWuXEF0WVi$#rj_=&-c_clgy zPxf0IxSdMM1h?h)homUPd>>;tH#M8#@imZP=n7H~4_(%c+&j4s%VHohjwOZdJ-+U? zssd4*vy$LGXJg-kQ@lrNIe~~~$z!&si&wp-L1y#(ZjML2KNkT|v@w7UYePnCqE!T3 zoFPt$gNu@tRb98JfB(`Ua2sS}ot~1yB=wGwm`=C+{(B58cgj&aqkk~FA-1UUTSBAM zKY2{Un-SL@Rpr}%kO~O+qR?t2gVXp{sE%1o)aDH4@w%0kdBDtG^hJNat9N43zEJCQ zPtV>8&47A)W8;YZu%E*g_n-hPxQ8OjroWxy{StDj#_C1^qyPnJ)h9Krk~K6nqp+!0)1`SGzka)5 z$_5j*Xn?@$+Plh-B*=I{v1mJhUV#Uf4h)AQij9rLLUToNP<~kWp#Zp7vB3`~N=-(Y~WYhYU-^{{?fKY4I`my2oB3Ljl ztw0!BBZQmjfRD6&N)KyH*lmwzX{SJEnLKc5uQ(zPeR z%!csYE@%t&yICBFrkl@!Ltus0yUO$HodIVOusEE5O$zqqMH@Cn4d-#eU2XD{+9*gnoE^}EA6u+;Qg+kp0f#@RLZyT1EBf*jq5)yPuV#14 z{Iz?XoqBGJRl4=1FSj#etkc1MYcswD$?LO9IG@Wd3ImkPq7*vJFqzy^X~L2b4Ke^-IH9P*hxAMkdJy+yP<8YLR1w7Dj7WPEf!4tcAhvnU~j zP&pHVQx*v3Q%JfQd4a($iEU=~2?qYv*nSh1lry(uKfp%VQ-P?ipOP?U%sr?Ul*~lM z2FJX{i8vj5KItJmu4=6kI&DFpsF9>uJ&YonXV9G^PPc+;#k`rUNU_$xGmC?E3^knN?(Qo-x~4_-5(6o z3T^+jVsK=iK(I%5uax32CcysUNc){-ZhKoO9a4PgvdM?k;g;O9B_ug{&C=8(kN zg}6Mk12(Z-Z_z$E7FUtf5U9vSJ-jx9CWwNw(*5s)$9KCRTT zFhlzJd)l(uyZCY@WGcdxy#j8+&rzHUP9%Ofv8%g#$B5ZPX{m2jNo)H;NcZ8A&&%6- zL2Y4mAIp$3F~A?J<-pqMCvV7#kM;PN(n4UDr*|E5^g6AiBfi@dn8kHAqV)EcKZ%G< zQoq*y&H6SG0Sk3zkV(!oYP?a4CURY<3qN)0F8A8+dAkr>f9(^-eEOf{R|f(D0xqa! zeg3FOC(~VHD6XI1^3F7LmngKNA1n6EL#C%D!ngdYw`nIt$&EPFDLL9#M15#z+J$Nn zN_%8<_2<=bc=~}jHHOPioHe$1&3Ka(jF~Z2u#cNCmmzqm4H+&(-b5bNesYl5KHcB_ zCj7dHkaV9fw&HroKEz%NdROD>9|E&JpC0RwqgU+mk}s-DmHpu_mP}1biNk*8*$u_{ z_B_SzpzME|1$Bw1ZkL)y@DV z$6;UJao1u-#XV!Aa+WP|X=>!R8jc^vMJh9)5R%PF{Re(ikgEO}z>4+Mspj<|>x8Sd z&xUrV@ZI5hIk&ZhKp8u~`x#?UxgaOi9I~AfJuK>SF1PR+X(8L(g;pJ*XX7c(b;W1q zhQ7RWUz=ka00t0h{-%DkV5$tsd=c2uTCRvWQ$-tTxQI?(+R~b&mW(1I#qp?vlI%yb zQZ|$6i=pefLWamP5OJ3^L@%|8q<>6h&)d6Xed`7brr4~=3ykDMQ%YAFNrT1c<&(R2nLLB4v2NDyPg1}4AfeeJUi5AKhw}?-)g>}H>W9LUqp3xo@D`v zq$xN!Do~+7rJnfm{Ls$Sqqo^E55BJ5)OGSg7Z(hV(gR54;*KCILpNX)Sm{wvlm)!b z-G@8;F`k~AB@D7I&koDKGm>L>95~xld-wRkgO5wYb?$VBg^iY#`X;fA#XlNZ+8nve zjKu(J4!lo7uxrzEjfryu5ZD3(6<5GOsh(g5=UiHPpC?suG{Zo^`63%YN>Y={WZ&kN z$ci{jdtfE9EwHroi{E_X@Tc(WS2_zB4;~VG7^HmB{=`+Ifg3jWMR^?`);_y@W;Mrw zPOI7<-VsYVi?MV4Et>(+ZPENZgKbHx* z_75%lXth7l(T@ChdFcI<+hGU9E4Sxyyvz|B+{*%it+mGH3NJom~@G#heUZu{<~e=GXhm*;uxiY5y(uWi1Uf6#F` zE|%PRK|_`{h2R0%-xEfWpZaPb1G<4Vm}LfewI8mIKkBdpX2J4<6hNJwn+O=R)KJ@0 z;8L4v;Hz`Quw-kmsXL<%a!qVlB2m(765WOm6rnh+x>$8GU&6DAA1BG${F|26)(^5h zhv+>Xs;>6IxK*40|RUggoJn;Zh z!#1-Ir)%yt`xR-`$xFIgUMv4)gClt%Kz7gX3GHajy!!S1fQ9w#E(G5;q3=kL4OgQN zZiFo8(MqqqCSb5%kD8F_rQRFytYl%}RYX0Gp1yaurMQ2K*? z#ib2jIki;Ag&zflQ1}m*q@q0eqVAl#g-5+!VIcrp_PPt<3Ps@!Nll+GF42ABR^`6L zFImMubnNVQ%oAEd6Jvgc;TBWM-tocMIBt9bHfhj#+j{6dFXacH;S=`<=kuf<)&ju? z7pM{z41+Xj7c&OBEg=AhatNFtHXFLze>*9sr@JfMh%))e)0On9sMxW~c{ufD8`YrT zpQ_U(THd5EtCb8H&|v#0-mi_}Bhd^X!hqyjhA6%7LUrPz>g3TxS9n)`37hmCVj5vg zL#NAha8&PJ4lUJSci=Lc>~AYONMd>bR)%`dNlc$Uo?yUBfnRPcSZ>X8&v%LHcAaTu$N zDPW71AF?e^Ie%C`uO9wZKK?lL>!T~_`fk8Glpw#Vuz%eJD)0J%fQ)){&j$r7oV_kB zRg@*u-W>5sbv~=df1scuM~8Fsg?%}D(ilQ0##^XdXRe7ac}0-sE!Z&XiwD)inK5~W zAQjntY|j>uLUgM6#l&n)&`H+>S^InkbU5u{r@NYaHD)X3cW^uP7dYu2K6J2xg+^LQ zwgHW~13`gTHNwuUFey(-kz1pz$nN|Ew?xE}a`>XelD56;%goF|o!#$tAG+9H1G2bN zyD6Gqo?Jc60aE2e_%l#nDjJ4PLDmR3S7X}MXliWE(E&y<3yG70tZ!>N_MV`A=cE#o z{4ha3Za)CGfOGMXy6>-|=BbwVpp5p<>>z-BD1;b+QzNQE1hn80md0?7G6&n_4YOdsT6gVg!LWv+W zZ4K;Ed}|l9Q^@6E?S!H}7lkkMP5|iW8AnvIVXJ)RbEd#kl$8GC$m#&lY9q z)GcTpavZ-r55*+8ZOM$%aEu2OAuhUIX; zC))zgaUcRn;ee!Yy6jZy`BMxuZ7EYfHnohB+i&kR_-H;OMM)S6^G@SVtukehuRH@7 z({I1c;IS`GCmxIIfkm2SZyP{gG$PI48J(1K=;Jf&-%khf>a|d&@UaVF_#TRnW+3;C z+`5wzyknR(SCrt5n_`o&?_3&)v`W6$Fez4tw@fqfcI{+X0z5C^FL;8i6lS{+M@=`K zSUIh1*Lq3Op{`63R~a>MbmL-0L-aa%XPgO31_ z5emHB?R1bYYTpOUKD!fx$;(@p1dHcdv>r21>FIA+PY|`vmZ7~o4_&YO$L#G1verR} zv(yKq^ihC!Avn5byv(%M0r_-NGS<$j)TwktyZUSGB&#+}*eC|s7|`-DE|tzI zw9|=BgeOlnrBR2u$X|B{(--dq%XqZ0Fkr+K$m^}%OD;U_?W@DfqmBbaY3i{3>1cyz z1x?^Y+Fnk0RN=ZO-2-p}6+(6H z&E|OY1wWGX&9~KQ+Mh^K_4_NY#hUoI79P~$Y9}Z?K$_wlW;p!htFN23Plcaxom^P% zd3LR#`?|?eNZe$mj+Cb6)dwVm-I_B@tO`JNd4gnnZR9u3M3ho-l-%&-g0%q@`v)yv z9iHPLG7)}Y$H#kft*^;Rd3jCmd82Fe+_~RmEU3b#Ansu3ep`uKo8o-ZYxC!SN`S2omCeap?IUB&LdK z#V%n`3s~3WePp4zwwE$V9p1#}W$#U-Q&PUwZqKPeb8XBmu22xCN#Pm1JllAoH7rpl z36Jc5&Kx$Gqe)gSATI`KAv=97V@H`4O*P1YiCd^Uuh$$9M^dpMk@w99=DMafyAVx^ z#l7S*^cX)UX=?B@ovgZaN6gEu&A{Rt_v{XnTq*m?^lWo08Q);F!neEhEx#mJYDuF5 z5N7YUNvq}{!_=~v+}oHm$XfBMuSlk+Vr&27749S#fv)G%{lxAt$s?vOC`M-Ip=0$N zkW!f`iTS5l(ttQXD<(|%jpUQN%7eAPzk0PZRIV;2u#upQ7%>~cUq$5fbcCpu+ChRv z#sxsmNUKM{FzQQ+T`#46>5ZC%D3*1}m6mD+0x2AJ5;r=i#RsW9{k0cq20AB4c*V)n z7+OccS3+b(CF-NV*`c~CB@WoDp|SqZ-=2b+u0wfeRhIOa@(Ti%d;IFed5O|OSkipr z6Tk#40v=n3+-AjEhC6EQ(|9&EB+RsUQ%K0q*D8$B`8?R>;W6if~(V`h`(N?!8@l#P^P^#Xa#cCc)*i)t#Sh3 zB|#)ZwYoHQ#{v1S_c~JL=To%Zr7$#raAMafR~rF!J3H2#j(i@wVh8oXZEgobr?z=|<$ua^azs+cVhNx0Ti)TPcv6$i zE?oN{B~*-27%#A9BBt+OeZf&O{pZ&4Vm7`fGx^vU`jhQ<8e}RzvP*ZS)||N6?an1Dhnt=El&U`Tqfr9t?<%?j)z^rV= z$Nb$d-D>+8hFK=q5gP)>Kn-X4Q2Ke3k5=}<)aCEEW?u{ygD#WPaeiQpBxJfU6P8gv74)d~MpOU?gmIKX-;?q)T z+l~i(u_K@2Bc;o_`7x0*y5tauIKJ^|6HKlx)Pvwxi{KNv|ni_VxAO^hTY_ z0+E>o!{5w7Q7s}LQFs>3olD^+x+JBfhrR0T7QxA|&m?jMD;p3NbmHIV(mFd_drO@y zWMy+htDXydPz>TKf_<$W0BE*;v@Av1xx0{!qjZ69KdWl~ZNh}}m4P`>=(q#~bP)Ks z*@s8&g;IJyT*yrXHAV%W6ac^=PkPasceSKA-Cy2rxGXz$Id>u9%$kgi*F^VIksgA#SXi=cNgyrJ2_&;pQlk@G0QaBg`Dfc2XnB*)G@@kCvdxT zW^&UnyAeiWvGZm92en9L_fOH&JOCA~vM^|-GTUk<;5mBw`Rxjo!o?}CM+$|4fL?># zp8*pEPCEp$wRK(RV$?W)=c!%_p(;0bJdu(p zTr9de!3m|Yq;ch<41&XF0wP)r!ApQ8&5-I51yUK~A8p^cry7qR0z#?X^iUQ!?2YQ` z?_dIPd`%?&cnW}|<@t}IQD1)6i!>p}B|HS|0Cmz?P+4~^u~BNgz*2$QhbdA5WcTR! z^^3VyPcM>f& zF3E)KK7m1_f4UT3~{fy=E|jbe)y54;NJyjlIc5 zRUZVP4pfVwP6ALRzuZfm$_63c1~^Vb^mql}My}Y)#Mwt8s2mWrAz#!OTwJ`BWA2TN z%5#l9Jt9g6rzVJ>uoVf4S3-TCeBX4bZTRc=C+Z+8k6=wse-3&E+(D5S_l57}C4ZE# z>ki@dE|158j7wx}9`ao7+m0GeQhvTOt-*jnF<9v{f2t@es8Np$XCM6hwK*D)Z9 z#2S;=4Fd9VV9|KPxkU_ublPE!nwF*{{q3Nws%`2;Gf7pEU^-#Cbz; zQ5Rem&fnUA{_}q`QPo>Nz^bX*;xb%R;HH3#q1tP`7!R`hGfre>kly_L2V7K9aWmNC zH>+q)#4RC1JT90b{z#1a?PeBJzylKF1hz|Z}43+|Dm z4J32riRnWBmg}u?z>xpe_ZMRXtCXPq{T zm@%1#JTZVgE>47t7w}NRB33C4X3Q(;_v~QIBio>2>&mSIDdU$MI*thg63Spb@%1nM zEDr`{Hiv4!E1*n-qJKOZfHJ$jf2o{SvtOW$DoQ5xmLY*GL70-d+AH>l8A$jsh}GyPnT)j}1anm_8)FAWX29pan~p(H+cec}{;wLT?bXYrTa zsX?sigxo}RSulOVemFZ(qVyoB{xgXDNq!5}2Uxb=`gwywt?=Lt>g~EqLp61Kb&8h z5Se~B5zY!&`hVR~W=zPB+n@o-BwdBXWP@aSx5C(f=0(0A0btcoFC#>?gJcV!Su3UE z<~~%1k`;yv^eA~gy0ua24gykGx})Tj2T!hU6&n=#p99(ZQ2ysYPq{6^=nWuB@IUow zP#h4(qpxKNh^p*d{GS6It=~>nyzFGU!Z+|OinM_qj-7sxs)Ca!Jp(^wn$u&<)d)0-#X>WLkgu-$1XV z0U--exB!~xRgD5SF&&T<8sz8^eKCLvA*b+r+&N0N281Y7RBC3!2ty^JfB9??$|1l) z0Q$QK(BEAU?FD=pP|UAs{`_ziHcE^{yEMaP5Zbm8?L;A1v!?L_${4`IfHu3?n}A{% zYlJ!eTbK`303pD)o6_w2me|*X@_zG>GQ`+) zzwDjATACmYy5G{315DGr2hGdPZzWUds;u2=3Z zTdBbFZTKZ_s>Uf!>U*fac=d{!Z;o}X7LYXhet+IHm(y5Y@Y7<>T~ghm(9CSY)-l%L z!yF`PFmF$WXoC4%dqw6Ld~Qf?IPGKref`FaE6oRUBPB~?OzB(mlla7xHHRV&ZIPbWN zqAKVx^W_onz!1N>5@CQC#$ZJNy4GjPOpI+b57hDHcD(NsN-t^B{=h#t+Mz;ent0v2 z&Qr6sz>*VCN|QgeUu+Zj>^J8zGHWZTn&tGy>{GASyBKdRT84y34N2tFDvb{LFT0y1 zNSRKi%SSgFC^@Nahbfo1vhx)@BMKM%ENbzNtA-sF1D6T6%)7PYKp}w@BM${%Mb;=p*K5fxjN*o4-R3 zUDLJZPfjYlw7K$&o=ba<3+Gq?lgM;o3yzpd|JlMqIxR^lw9K%cbPM#UuEK>qpcmH> z#S6(+);eQ%Qs{l0oDRG@eC1jGh=lZU+H5RsF_2NNl~SkSu-u~)^I{$(3$|-#BRw89 z-vhz-jYShUO`Lk~q_%3ftZM;gi8Pyv^62yc~z(>@sSr59PuEjo?f`!FrUxm9Gtn~73X zd4#lgQQ}uyp+O5Fmx*Kh=}+AGNd<=kGy6Ka92fqXr^OG<-IHc~ml90uZ5;3y+i;db zfKk#|p{Cb5*8On8u9TA>=%?_rU%1`rF%d^6aBMSzr-?6SRlB{!V$~4r#es}b#+)n6 zDlj2cJRy93Q42cAtkpK|ofL*r|KMi~F6|Oc>gXLKbW+rCkj-k>I|sST%U3vjOM+_w z+F~sT1I^K6+Tv9p*IIwtzqCh^x`-KC@I0|JPD%7f!ED;vgX=8^&EaNCIs2Z^5tHmj^+RrWV z?Eocph#g*CgYMS>!WH1Sqjguii?~#Xy-LFq)O7b$wq?(&=;aUoxI{zr@Tbz4H@P&H z#4qLTZd6^~m68^87r`tbOtDh`FMfovh?DY(yGJ&RU5IF&)8IGGp*>+9Sl_)f%U}m=iiR zVDa9#$eCfb7m8n1B~LQI-W|Tp7<%}6LY8;lZ-M>o*;U#T5?MoyW$`Tz*v3x&$)dZM za!C@oOcaw8xdqhCL%d_W-kJV$I2mE`K8xg|p2>`fSjRoHYtYpZY9NOK1uRt6T%ND{xz=E%bhA2GSTr1_bj!7m2KWd#_R-?n_a5D3OO{q1e;?^Cf|{- ztSh?w>gMY^)#c$Bn^+leGFouDbOz?6oW-X`ic?lYa+`mj36QKn(kGxWM_+_`tsD=J zv@clQY7{(-Sy=EK+@F5|HS4X{qM?U5vL5P>JxRv9&L?r5@7}d~o55gMC$>L`JuLE!Rrt%!*rW1BzY(5XNnE zc{S~!41BruDN(K9!fXa|VivXd)plk+-e>6y9YuAlO*u$woUkuFLRUqotS{E|(CuC7 z2iEZsCl%%s!w9OL>s?(*XUO%>I?2;^%3Uh&1iLF%dUM3bzNSdvaTbo_JME0 z_N%7^47O!*o7z-TgyPsJ!%onJ4Ui!K;#WZcCP7K$@3XV4zwya3?NWUHkFfbgAot82 zX)%6O%P8P1O;7QDgkCPdeBdc6n$lu)zpup6Nh^)dC3Rm5DyK}yt}qz@l|Ma9Vw!?H z$$A^lxFrv)ggA18K{ z6yZ8F%RxaforegfvtW|+BTw{Lcq%as4hdC+BPQ_t(k>#=5#xJVAPNV< zWD=WJ`y$ql@m47Y;CnKu^2zIuXQ(TmsVK^yNAx6VIh%J#aDh@VsI>coMuU1*AJjRh zm8o{Mx%7fE$?oRaE+52x{DDgC@f+xONsKfX1%Z<8YpGT?4B@R%J1gz z(nPi6B;ZfCGC_KT)l~pj0f_E001-rD#pC6>P`B<1O69w<7zif0J-_uTL4;BS&!0mO zzw>wEk3~vVHdNLM8I~8hGm^SY+cG?BO0lby3e=Cn!-`SABl_~C&>HcT`HYAG5X+%7 zkT+#~aG*sm03|a8JcS&&Lt5UvF+j+~wMsTcmo8m};LSAgGvLnQ!O{~e1kK85KwdiN zQ1a-^8dr4n5YSOMj}2;7c52KXjiIDNSnpN3!ZlN!H>|#x;_pS@?!|h!2s+!0aT{tU znzqlToXMRC1qxez7CgZwY6sw!+{Dx|h_w#9i(?=O1y$kP*@TeX`8vUELaa+tUYS#9 zj69o)2kmS-rp0;JmN_kM5q%Akg1>uy;AAYyi+`Sw$D`>>q$Lbx1=EV1=)V`)e{jJ0G;?H5Wz33wyzm_laRG{ybaApKh-MOs2dJsdbihbovIARHkhaBV)d{O+59p{!Y53b49X0Oliitn||1SV5^S z-kQcq?WtgI%}YfcJVcvy0ad~$$kfV;90Uvove-%TCKH}>$4K>t7`rVvTHl`bx$s#l zf~l)MZA99s`y=1nc5wWFeuFN%0T-agj$!?9O?!Wy23)K@3q_Tnj@gmZF~y;_T3S7t>xDj(>|WO5M=cQ~N(czaQ;-QgaQ7u6z4D(~6tAJyic*h63E zMjxb95=radHmUuyeI7*rL z1XL&r<-13hf^My%WEs%4WOR+hV54CRw7@w%ls09N#opL_J+m zE;>Jf2j#^5ixD+%OjH&sRsTtNb<-+HTNe%k)f&aGJkEa5fkbkl=ZrFXF4TSV^q=HOFCA6SV9vJU*$Va9_l|F&p+I@PgpP}9Azg;0dqhQi$t zjltw^qsIH4@zgY#{RfY86ZXY5BpT#Ozo@&?l8v=vfz(5*y9+dZ6o`^pUxX4Af`m$H z>LdjtIOIr z&CC>4)w!>>lFC`^7>~<*okj%iQHcW-BAw&ooaV8g$UEfNU)UR{fXX+`Z6Zp`-MrgI8BND!H8t#YPbq{wlY~tR4o0|by z_w<{PD4=%M+H?t<@JQH`G^=AOdoW_op=Re%USyqW-;fQ*Wxbh-?KOfWTn7}-5wrzA zxYVGJbqQ2V1)TlHGe3zUI(Jg^*O3~KFCM5_PA&&G=U0V+wbkKM4+lsoo)j`-$Ba3W zjh8@W8wChqs1V?paHXd;T^vFu8|+xPd1dBQ&~~evti>rV4;L3N3|b+q$A%_YUOQ*|EWuSSW+WiK9m+(-qGHYm7 z(PQ?s+kO~-=cqxSRxzz-L7xNabY8s+N(^0yAm}b^%uM%FXwPH0fs`~VQmF3oNC8vd zG7IheDkK7n&)hO@DEgld!~qpf&)FD>bf&Ia!+FscPlRY<>o98NnF+%cc5&k+;g>5X zW8?M*D?8fBks6Bxp{;LEyNLml_bRo7upm>AXCN=qE zREXfKUk1YcgPrjMF*aIz1mzLy;8d6*8hl2E;*EvsryC}w;sn}H2A<=Xr~4JEtm(H2 zoal)dD3hW_Tad%F{ZJ66i8{dm)!a6UHLf?yFy+KXhhcXoJ}SI~J8bmGZAEUSUts-q zY*Op4wNl=1vkRb&Duv|E=q_r~I!rY|XbAoMZ`%PnMfGv0MzKNY>)awMaqjY&T)laXN?sE zKLsch9QlvqrKiAa65+$YK1*_wi5gox%q;N!?J+Y{qJ_AxJEmZFm*`5FPyhI;6S(Gs zqgQu5{Rp%t178EWv6I+o**9j%p9T!fOLx{zExO&Ml$s89qHI8~_ix8+06wU&nmdBN zQqUC$CdtNosE0e&)IU4>uG_N8SbJw6U(6I?798$sZ36OZ)c`d>&FImM05)*qNlgK? z17dX*$B;&$i-*g9hoxwGBn*hLSjlWVDg^nBEPeP#+AViY$P$3`m)eHseLfz5K)ml_WQ!Dv5$)Rc zS^^r3i+X(lvVWx)D@7cg{bXg13=22@vx?WG43Ns&o|ZV_vCbcX%9zZ36NNYdYVCd} z#i1FuZG$>JUEby(hqTWSyXRf}c;YbKhaLP*VY}ryxZhXF0tO!BWRThG3sby(R`T|> zy{D(9-g3HFeEa8TnxH&;V`7_W2lCDG3r%t}rqEYU*7zW{SDNNc-MYARA$KsYhON;A zG*tUjJGTY|d;|Rhkl>>C9Aj03ndrU7h(swLUh#wlpJSlP0F?)5R=YRxX#TP)aeiu} zWz*HU!aZLAr=T>wBh&sQTYp`nYLQN|r=V}{nAk`IAyWLAzGEw`&vO1sUE!YR9u<@W zIQp#Y=2st6(=4X%?ud#ciBWDHC2RY9n@0hKWb@^(h_&$0VnwG9O&8sez&nY1d=;}s@}@D!1WZk z%w3(Y^HOoGcU~dHl+5J;eIYp6N|x>oAC4b5Oe!&LdnZK>W(7dME8g-a@YsA098Z0a zw^PCP+V8P>0LY8=(QkgTH2XFDHSl@JsI1`Gk^D?*h;3HZcj92rb%;ha?|(Px8HPGN zbeb1I^-?zTN)xsJe!;VOBC2w(%TISe^wHks*A-6Q1F@~5+eHbxLDM%>Duk|MGBXu> z1K2qz6G2^=5lleDg+a5{qdxLMoI_xGjCW&a0WA1QR`m#TQ*k2FW%;(;+?e3z=N}&v zrYDr2ep*zRyIRZQ_*nP&NUfoArsuRq)wXlHK%*ldV4x@kI;1%v4H~GCfnLog)qxml zfDNyx7Q=U^tIg--?CThUWiZ|y;S?31X^e66K*YFO@ySL}61eFxI{e?AB0b<=Gc92V zif!18LwQ>FzCH%pzt7hlhuqDfRG;8Itl@g$M-T2^ z`*>8+1tMyPgLh=?NC|Md4wHR>SNf8NUh_gupWG=}?7ql1AN{#)iGw|%p(R?pN)`4U zmx-LGUI*XDnA{GeA1j7pa?l)ntY!TZH~bLVN3-GzuZh;F*zK%S!#tWSY6IZgQmD;W z0o`Gj%P`SfLTDtNtGEmGlFaRAn(Wn7&bY;0zmVc_oF58;Em^EcSq(_83LV`?CR&3H zpX=14j=`~$-GB^JyGz6HNr7yuY+5J#YL9WpPUMR!f0T)#r!*FT@U*d_)~U0I&bz7H z9WOMi*Vt!J?z{2-3cK#OCbBI&DM$bzAku|^K1HRuB7!1>Rj~oavWN;86hTpGOA{#* zqrh6$#wscbkGtA~CDaouNXB|x1c{M@i!jaGZo{#)`0LDkkK)5h7SCa;McJDFzgdDUqmfD z2T&%nYm^KMaDH$We5u30XV8`8a1PwPGf3WMsJMMbT7Gr^?|p%)xaoG z+L!AVUqR+-RB@820mkwN+qZg@VF%|t!EbVW4HlC!5mC|6oaDHI%L1j=?3%T6v0u=|8B#KQIDA+#%g%U0tHEcgHG;xZFrxHfABoMT$up|0;haD88vPLGVD|` zVS`Dq6E5|!J;-Fkb&dsf{Yzdp4W!wT&p;MtEh}ZaZ6aXaiu|Q3R~>sEcy{5F-L`kO zx=1n;d^EHazCUlt+!yqTiEdR8s!Ui{Pf}bJNfB# zQ>E8BV-xA8mOx}#_%RXloQOFmcj>IPNJgpU79_)3LH4_yu!Fjs3i0V})6tZfsK=A6 zQ%5wV0XZ(((r#BieQqR3hObs+iPD2Kq}5ZTW`3I3ts!wwuJ}p0fz$IP8)OvDOB>Aq%YZ<~2XyOxcSU&)&{Ca~)Q>E*B zY`KFBq~Vg29J!c|C_W)MAuDeSrGJ>B9tl6r zL}O}fnt<#FaNWR+=TfjKrm|%ZbQIv}3`C$bRu!ko@a4W3hz#!nJ<3}N4dWGp0iwF( zuA%`DN~jq^Y_2r}$x(i_1{pcOH`@fw5G!GRfOPoxw}3@%>iGY%=^=xTWl4aFjf z7yB0lS+6laeZYAQ5~YXtvnxpnD@oaNEnVhM@OfV3?m1zzusDpiC>+S^Y=vB5y#eex zid4wp)gLX^WLP}qH*<8Cq7rt=Y6F{Fy*W&kPq%kP#HBxY{w$Cso+c)0SZdTGw189( zWF$ISo1ebL2?-9?lC~YAU?o;IpPSYSWc(E>D*LN+=A!l~#(toWRfstD^t3~Qi{RvE z9sZ4gDN^rBT(2*-v+0uSEjI?=!we0UckJ&ItvR(*3|C|mc|n#xAW@dzKVid>r$mDH z(`TZ^$8r7UR*>O#mwY!pfQ^bN?!cS{@Ap)X*Gff7sCZkxfk{-CE@B35K?G`3z>nX^ zaLOIroFdPQ1Ti-Y0>DL5vwcw-ERR2~u(@GM8?>dlhsbc9&K$nbFRLg~lx{c+9oTj& z@B^q1PDn`Cc2lwM)SIy70RXUTS%%J}+bOelQLwt1tHv9=8(gct{Gw&Ox!2v0st2?9 z!Xok<73{_LY`XZ^FCxkOMzFyIYMRn$tA>TkK=Iw2b7fwGLvi6&lkFY0ABld(ydRsb zjqfe)2LA-tOCm;$_gxWVmom0~J;Ffe_7XbsBbJGK&D7$gB_heTag8l?5jf3ISVDy! zUNI4@4|uo!|MaXIQ=O&&_JBq1MW6&`Yib?^t0A)Cm`pIrazq?=^RwC)Loh_>SR{H% zc)EL9$)wnsXw&d43pPEMB@(vJMT>Pbq|wYhpA}KZqd}EV7faQgLZ3GeKx#-NpIcxX zpdr1WK$Z<};tNZE5(z$T_-q0ZY8bTQWSg~A$h$)FsYrbFksxIaC}a7htB;8U=Emr~ zd&<~bXJ9TV`lIT*eGN(Cr)?W~ba6YFO~~s8Q{BD2DVFJ(&WM!@lJmdi|-^nrFdRj!550%wvu6g0-syzjzn2aM+eHD&jZum5SR=2 zGYMxEd7(mQ-Znn0-2R(0vP)ZC+UltQk4y(U)pR)PI_H3p=6Wtp^{EzbpM;>n#+e;oI_9{&Fho(2d5vx4fP5 zQNe7~G}aoOoOCr}*DZ@^XfSxmrz8kFrsi5O{`7MN$VihAZnwVK_!j|!D22Z&Pt?3Z zz|mW{Dc^$zIY^2PI8AT*{v#KF;EJuGSJVwQ>qF9rqQq7@6!z zvCWCu>Gp~`lo_uGIWclyP<^bp$#PK;zTRJ>6Gw)o&S;PgsC7ckA>#gY6A|tZ#@nWA z9V$%zjIQmn>aBAV7(vjwJpCr3o%9|Bs8J*enF$g7@x`f(7%+x(K(1oiF_E=NrJ$+Amhks!W+qzZL= z@vLPrKfE+(-#J2j=aH*XzmDn(3i!YCyGox8k5b5A<{w*CJ=blSJuC-(axWeBm9|vVww> z`}%A=V}wZ1x^t2XC!YJI#0H!BaP8l@^XZ!3B3L%pmyqXr)LuK}(PQzOTV)nz3u9~_H{<~!Aa6XaWch?c$y$8w zeRm{h-k1nuR6o;nR6EKZW|X1#+TG4y?57gfG@SKt3=JP>L%>m=VXQNf6Qm_I8xs$F z){^PNjKKZ98{??noTg&cjnp}0{=H{rqXX^d88~|W7h=9o#A1l$fMN;0Ou~g(*sUpm z>?Az%eL3ijd;d@V-Iy_*{i7eSDy%dI+{<0B^OYDncPVRdLT(J`t*6n*l* zy_=ram;=-o@z9wOe@nrD$k};!?l=L1El)Vi*M~XruTL8F2U(weg92}p!t8%;TDz56 z9@5+4F-~LyWb!iba>VclzI$tFt82bLZpzh`2j2W}`MsgB6rkA2@_>3aOO~o#z9r6c zQ>>u4HvD;(Ap~(EYd4xETzzj$bo^_+GBzj&f&w|x1N7?NK8X65am!ao*3HD=&BIF> zzJo6bmE0i{v|bLP>mi~BSgzt`$5ceo|GgpW?xvjfg4fLoE8{dd?N3(l)3?b9i*$Ij z=91=f*;{SH>l`Hu>%DV7s5xzkY8y(ekjO-OW>Bo^O?WSxUMdItMpI!GiiZW(dD{2J9rZyR$0(I;XP? zx@3+H$XQzI2m%)z>?-=QRjs|lI$eOmd%)*iyf_PDm*j<5yG)bsM*Q_K?Or1TBTq-2 z4rUS&EoAH+A4M$>cE!&9TU`gqLSsDoNVEb z?QQL<{+V43z#y5@PG3on-kfYzzGda%PYN)fyH*JcqWNh^4PDlq5y6FBM$!tW>Rv{W z?$)B}V*b9y5_{;${m!d>Tt9yU=+bo5qgGRTa|vJAx^Da559vzN?@af45hXjivZOog zN>?8ktEX|xyRPb!IYf?8Qkgjf9EQr6#KWksH^Pbu#c!@(I}oI&`#SJIy?9M+59xB2 z*`{FocI`pw%$hQC#dp!btDX2~`UiLVyE?c{OAD{x;e^&kkV=DNlEqsi9un3y;_tA_ zlnw^LYm(^o{uDV+ibZr~Q8r1XvaxNy@O{pKjp98K4fvDC3gYJFX-l1-1|prIiWjy z3xkJ(Kh^wX8&KAu5en=kf3K0lO-dv|-I5qmPG0}7)C=zOoLu7#c%^QlVXlGKJ5q3Y zZ1#+|V7_Nu(j5KQhY5Eb+G3?%$KL+zff}D%{te2gY>Kzum++#r)>$QS;pD-$BWopz zi+502@A8LBGEP`%pNQ8ch|7@x-nr+g|3Qntd29RAut_BbtRz*msr-cA{dgoyvOgoz zvm4r-8PQW>V)w-azjPoX5}|6RMIIN2JwiM4n}-_MTMYFs>1ckLuZrEK+R`t6??q1NN&G8t5&PE50D4%?l$ zONW~)ONcm`rFUbgI}{GNdV0TqZ+gPWbN+CL&+wIUWV_1nF@L-7rrHq_HA4`_v}vjp zcPNdlD~be{Z{zoO0rAFwA8sSu_D<~l8H#zRzD+ry&#tTXlRf!E d_f46iancduoNXp&z!xc@)y`{|XD{_({}<*DE++s0 literal 0 HcmV?d00001 diff --git a/frontend/assets/icons/icon.svg b/frontend/assets/icons/icon.svg new file mode 100644 index 0000000..12b2e42 --- /dev/null +++ b/frontend/assets/icons/icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/includes/header.php b/frontend/includes/header.php index 8181285..79e5511 100644 --- a/frontend/includes/header.php +++ b/frontend/includes/header.php @@ -23,8 +23,10 @@ $page_title = $page_title ?? '首页'; - + + <?php echo SITE_NAME; ?> - <?php echo $page_title; ?> + diff --git a/frontend/index.php b/frontend/index.php index 700f751..ebf9633 100644 --- a/frontend/index.php +++ b/frontend/index.php @@ -26,8 +26,10 @@ if (isset($_SESSION['user_id']) && isset($_SESSION['user_type'])) { - + + <?php echo SITE_NAME; ?> - 登录 + @@ -133,5 +135,6 @@ if (isset($_SESSION['user_id']) && isset($_SESSION['user_type'])) { }, 3000); } + \ No newline at end of file