From dac10f2a26bc2b8dd3a7b3ecc350a6e0f2ab384c Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Thu, 4 Jun 2026 01:58:56 +0300 Subject: [PATCH] redesign the website --- .../app/__pycache__/config.cpython-314.pyc | Bin 1994 -> 2069 bytes backend/app/__pycache__/main.cpython-314.pyc | Bin 5611 -> 6643 bytes .../__pycache__/product.cpython-314.pyc | Bin 2848 -> 3374 bytes .../models/__pycache__/user.cpython-314.pyc | Bin 2100 -> 2100 bytes .../routers/__pycache__/auth.cpython-314.pyc | Bin 11792 -> 13240 bytes .../__pycache__/contact.cpython-314.pyc | Bin 6829 -> 10115 bytes .../__pycache__/products.cpython-314.pyc | Bin 15692 -> 19257 bytes .../__pycache__/product.cpython-314.pyc | Bin 5055 -> 5711 bytes .../schemas/__pycache__/user.cpython-314.pyc | Bin 4570 -> 4570 bytes .../services/__pycache__/auth.cpython-314.pyc | Bin 6874 -> 7012 bytes .../__pycache__/product.cpython-314.pyc | Bin 5794 -> 5931 bytes frontend/src/components/Footer.jsx | 29 +- frontend/src/components/Navbar.jsx | 28 +- frontend/src/components/ProductCard.jsx | 1 + frontend/src/components/ProductFilters.jsx | 4 +- frontend/src/components/SearchBar.jsx | 13 +- frontend/src/pages/Cart.jsx | 77 +- frontend/src/pages/Checkout.jsx | 4 +- frontend/src/pages/Contact.jsx | 4 +- frontend/src/pages/Home.jsx | 115 +- frontend/src/pages/Login.jsx | 101 +- frontend/src/pages/MyMessages.css | 278 +- frontend/src/pages/ProductDetail.jsx | 9 +- frontend/src/pages/Products.jsx | 10 +- frontend/src/pages/Profile.jsx | 330 +- frontend/src/pages/Register.jsx | 133 +- frontend/src/pages/Sales.jsx | 4 +- frontend/src/styles/global.css | 2644 ++++++++--------- 28 files changed, 1769 insertions(+), 2015 deletions(-) diff --git a/backend/app/__pycache__/config.cpython-314.pyc b/backend/app/__pycache__/config.cpython-314.pyc index 58a498018a9c5d252ee73dda7de4a862f12a7c17..56b6ae3e6f24475c0a6e77456b014761b0cf03d8 100644 GIT binary patch delta 429 zcmX@bKUIKNn~#@^0SLsC8M9tZAPh%?)KUPF7%15P%Bug9L$Q2~2ijnJF!mmS2>d z8lRYwo0%71kXT$?o?ny_UzA#$S~B?#i-RC@kpNKnE#}O;l3OfE`T04M)mi-+k4!FS zt%{OhP*lChqVrLbfsyf}9D{)HMHbbM@*s`^m?QB~5yVkq5D~w~BK=Vr#8H8AR6!gy zurmEm>OfABDA1lFZXn^ODLUDXEs#-TayOfqybe&Lm=Q=g6p4XUu)zpckVO3C2W$px zH`H}5u*gjoU{_<*o@~yZXk-GE1L-MN01_XV85tSxGHBgpkodwT#%R}3^MwIOeKca= M5$U#S;sDzW0Bd|-#sB~S delta 331 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 diff --git a/backend/app/models/__pycache__/product.cpython-314.pyc b/backend/app/models/__pycache__/product.cpython-314.pyc index 8700f61ab75b4ff64afcd02e1eba8c54c5d82a13..127d1b2de3cdc7a85622f468f59f6861c2f7903c 100644 GIT binary patch delta 1097 zcmZvaO>7fK6vt=R-t|XfJH$99Hf`15C-VJZZ zsHqessz9Q>aF`3Ihx$ekQq_tJ7jAGwqG}|>UO4vBLr^3n)C)74O=P6*;q80B`M#3ULY5hUwW6zDwoHfoP>|eEjnwsalP(lw z7~nZD$jv`~GCKG8eV`~w`NtzlL+XPJ=Y^oFtbl0{7-7Gu1APxAH|UUN-4XlbVU#^r z=cGLQPyIGqFvlZ)Q_Xe*BEs#d5yt>?g_^bnDkm_`{toGv+;~ejt*Y75 z8>HHXCiDt*9CT`0jjDc=06%bh{n)VE7KN}^&~&PGqVszqH8;uw+p0Qxldy95s}hL+ z0VaelYUn_#CM7M$?XjUoU^jpnaT;C$dxZd9h0ocu@bplgL+_Tpgi%rAz@7<-gPSZF zxutY2Y{e$n{m5J)mA!X%v$U0(-dK2@%HBWUIn%lE>%~82w^H+*BnR(}Zq95aCpNxe zFCweiZ4^?{+x)J}kV?}P_Mb}@Q8b6oTix9GKY!zWw(gEYx$_>TP>J(?Jk NPTi@!L;U55J^+}m1OEU3 delta 569 zcmZ1{wLpwdn~#@^0SJ6p{$);P-^i!T$fz^fi19v?3FBmOCP!xOAfCz5O!AsiLA*hH z=1d@^3=AdGv8;*=v8ZA)U@_UrZ<(a)<-lywAf_NTxE^`1m_n>#fD6PFWD?12cgDwr=2Bp4(FH%kpHCLF|wB&H4)69I{7!4+zRF&HxjiHbAia0H0~Nr4j0 zAn_8dFoqKCAZ}#_O^L||nQJBeG?|LTfY#k&Pf1NnEX^r#(_}1?019l*V9{b^RNg$9 zHJ#Ba9p+$7mRqa^MVZN|MM@w|thxCqsX4c}k`jwk`B@wp%QDiMgqhJvrqVwI*k9CQkmtDaTsG15`3uipyE+ z7DsYoNosn2QDu=f$Re)f#G;b;%#zgH;#=JLMJcI85KfWahBZRDsMQ zK^Vafk}#e8fUAY6J8p6&x9Q{)+!gHK7}#0Gi!>%j^R!ACfRuuq2G)6t!v^T3(wtPg WqQJ?&cvSh78O1wNzA*qPup$7@OLy@A diff --git a/backend/app/models/__pycache__/user.cpython-314.pyc b/backend/app/models/__pycache__/user.cpython-314.pyc index dc80046160b7db95e6ae755839d5040c01f7e608..b0180e7a821e654fd4a5eadc91ecccc3b9d568d5 100644 GIT binary patch delta 20 acmdlYutk7dn~#@^0SG!T{@=*0$pHW}1qCVq delta 20 acmdlYutk7dn~#@^0SJDw{@ci{$pHW{NCeFQ diff --git a/backend/app/routers/__pycache__/auth.cpython-314.pyc b/backend/app/routers/__pycache__/auth.cpython-314.pyc index ddf9b571f951f292cadfb4627d6a076e63a260fa..be636126c5931536e414e5d2fd86968688a0c7e6 100644 GIT binary patch delta 3940 zcmai1Z){W76~E8_6FV=Co!Bw4W5*6ooH$N^K!5NsBMzVDphIq#f%&!3xf1Gh)`X1=VHz%#klewd6uu`xTEDtK`$Y6Opm$SHz6Re#W`h5EOdTBo*fu-v7YX={Xim2k(mQy)<3Dv)YeJkkPr zGEJt*DMJ0SgssvxaSpV?4r*WF+-z1`X>CA}YzcG3J(V-n#Qvsj5FEgf%7K8L?~>o^ z%_sN%LrFL;XRieW-82A{Zb0Buo@_!U60|@&kjO4p4XB3}|eXMTv}oy}SNx!NJWQ9qmIZHhNktj%$a?bC1Z^pTJeREi!nh0pL2 zLhLNz4zhH)S%p~kTX!e>gH6wj^{r(Jfh&~LD92{>ma_jX|ilmy&>OE|4y@mZqZ)OMTEqtF^P<5ztxTJ!089YiZ(&@DLXnz*CeT4H<^bvXi7{0MAc;1a+^* zK-MY>h3tfU5Hv~6H#EJVom)k@DCtx>NR;zwS=_K@GHv;`B+__fOmszJRE!KCbEP7X zBxz@8G!YkF@$s<(B3+hIaU?3GL@EyZ)U*>mo6(Ku^)u=uYGg_dj>lqQw3sO$jYy;7 zO4+4ryP&+pVOJ{Q!m@KsH00{eCD+|%SGUicQ6Cu>=`mV{#x)0{G58woWEn$q)ox(X zmyqCo(|RO(n6b<@NilOWB|DA|iOEzn5eHvrG@kNl=?(;Sp;SA3AdJ3dD#W7@Lo_}j zzsipC%Pctt+KmdFC~4u>>viEH=W9k+*Z?|!BKVUoafFSQ?U~FPh|Vy5eERs*@g;lh z2f=rPS9{;~Emc%qaGZA(-b|JYf%Ac->W0U9O}S?3#Vk+M+Uc&7U8g%v?Ojr7rgxs)d1^N< zCU>3Ob$a5y%9_-t1h;Gu=(B1GpV1PxN_pYZbMc_4CblsCy%wnQ1zH_h$)*h z2Cf~sHZ;etUDU0c)2;hLZ<^}m6nAM8}#bMwIs%6l8suuf}Q zV~LSydeVp9o{%`;3XYcbK&VOr`ALFcv{oY`wT zgc^#RHifl>&BF_M%eI?q)G2s5%w9Er3v_;Lezj$P4lR$4=k3h|TU%KVd(&UJQ^5_f zD;5to%zkNEJGmE($c0KnxWaxwdyrHj!RnwfBswJhKzu6t?3U3tfGeqh;O6A^ru<-n zjwE0@=Z7^t4&v7kcNxeOfgCjOXE(mJksY-%2**$zE`%eGpy!3d*u`oL=T7x%g(V0k z(>(S-S3Hq&9ZZbJhv@`+vdSCS4kC)@Mm0zTBt;QpbQvXd8rs8Ns&NEgKnyky+6&~F zXz@toEGdeX&tF9f!M+K&x7p2_8xUEPpG#&XXYjSz^5i+tK=gt5Yg!~9v zcCN~{N7tu>*`r#SJx?J@`V=910l)HVAVTR{<%)*D3HnwJE^P)DbarYc0GV!NNsE=u zIBne#c=d6a@_bc=$D;A^lqik20l)N5muCKc`>e~g1FvuLLBe=R1ze&0uDS%g@3}%d zyWxbXi@wgja8@eP8}imGyf~4LCB|uP5cy2S2c1i8R^f^a;>l7Q5;>#QMH!t@;;ph& z9%y0oqPX-c^6hEm4ocqvYaha&^jCJr^@Fg6n0(i)Hyqa;x0UyV`xT+7U4PM6{TbWk z3$qP(TRv-}B~2R#KfuPgb|NVwhHABmG)_wO;nef^P=C_1tVSY`KfOx<#&9NG^uJy`{;vRl|EE&VEt F^uN*{fxQ3# delta 3028 zcmai0du*Fm6~EV?ABp39jvtBRJU`os9Y2zKX^Pt{bR8?%`bu244eOT7xQUZ^iyyh4 zO-DD;1Ue-htXp=61`-UAKx#pwg&>i?`5zHP>B6T;NC=5P_yd=Yr^LiL*LIp&&{*=% z_n!MZ=bm%!Irn;N;jL*oEH|48eEwzlIMdy;A-B`dYy^J(LNA%29+GHEScYh#Ii^Dj zAw^Fs0jcaF3G0k`M5;=?LfQgS+a9S;NbMkX?2-1(c;ctH&FP3aXPk-Fn&laths;<< zXvN||nrH((my0a5EYXpQkQDtjUE0p?=-h5Ma60NZff~otS+kbt0$w-rb}bFmShPo2 z>IH^UXDPVL@d%C=IKDbgXqVF`IQ_u!*KxwToPgjA04G?-iR^Mhd`t>-hJh2Q;|wMY zJ`x<<{E`%>{6G40)U|om5Tn$^uN%J`^+S?WOy4mU0AxKiaKYe#3E-b=WQ|-SEF@O= zMN^1&@v{aG|AFaZL;;~@NM}=-r66TZFbnEfKQe`3Jb&*>#qt0TH3Sk}AW^LVVD`)8 zcTJAf$-hd3(u(;oEKINnAj6#Rbu5NL1hl{oAqbCR!Xrg^^p}RY!wRfuhGPDubWXG6 z(wCEkl&W6NvpMF2l}C8@)kZ&6_)i;sM}*x+xH5*DBPcj{=*k$E%~`PVs=4bT=0Ldb ztwxX30RWMg4j8PEe-ImW+(&q4w2VLBkBONGY_{4vz$C;7U+kI(Ta@27|4}z>e(o zAQE4;KK6J}Vn<*ft#Q7zw3N)HvT4n_m{J$hbGvyA%9>%hlxAOK&B!#)XO@a-#*Xl3 zTEdrFLBzZWCvZ_p&CO}X*?cyeDQYH`o@Z%wF{o!xA>%kQOmml#B^C5f!c5fz`2C6^ za;7z~^g>2OTp4d)vE1 z8$&zofsagjt8wM&vY8l6YvZfq>#=K-J9^{ViPaO=PT}C>>dE!XclEBFCi}{S$oUoH zfu;NcKjt}o^p?aF*c6?HVAZ1V7OF?|2et*2`~N-T$N8eeM?;%mb7UzU=l^z|v17zR znK|Hxc@Vt(Vrz)H`L$L*?c+acbvI3+7?Z-D;=gL`P+owcY5>5DR8wLA|1vo?57JTI z*!FcA;@@dI7gk`-jw1K~9_3n`ce}bkYt;2Nc=k(|-D`!>J|Da*tn zzj>G+>%!#S>q^!_5?#GtNSFDgZU|{}t-D{>HVy`_$QPh`m0Z54%;!tFIhNzU==EO} zXMtzOuyxr4LS4idohCt8B5ck6%=z>2kY2eK3TEWIZOuK@82{1xRkgdFxop=1@-p}c>_plCjeepZfd-baJM&F#^0YU zh$$0?Or5+O_#yw3yP4nd{#}wSlweHNBWc-Nc%@U7RBc=Zxj5*U~gKQRI6W(s3KxMKP2%Y_U?tfY#g zibl|TZ}x8KwhnIfZ<~+Z)j#>6zH$BZH=G~1BfoY>w%Z49CbrGdyZXnnW|=K9md+I`PXOM1@Bj&W__pkuix0RobO3U3 zaOgZWVKdS^$s)pr5Q66GDkgNDDg5cmrcA3kG+ lKNJrnqKlPvFe(r5_lLh{g_cE`udIVn`7ob3_&GhA{x3^EZMFaa diff --git a/backend/app/routers/__pycache__/contact.cpython-314.pyc b/backend/app/routers/__pycache__/contact.cpython-314.pyc index f4b587b7f61e04c2eb046d0910eae1f3677852d5..0065bea5833bbf2029769ab9d0e4346e337c49f3 100644 GIT binary patch delta 4569 zcma)9eQaA-6~E8+v!A~m+i_y&!!J(b#7&zlUAJUi*Czc++OgC#X$m80G`CR&SmG6oW5BNYdpFjD#`g= zR+eyez91{PMG(WOf-EUYI(t@Ly8fauz(vDgU^o2bHXzI76Vl8D){xwa+*`%|H{>1oAswKnKpJ4k<4_~SIr~^9^FpzrkSq#T*5eIa*$ny`n`oo2T7Rnrv0WV*sYJ! zT$>z0_W?s5GUO1ge&x=x)z0coUjG0xtZZ2stna-%rx~1l_$wf(ZH6Hb4i(EMU zs5GxoG?vQe7jju?DRu;QN-0sviD-UNlP7MxAW_@BN1VJ$Voj=LAt@&nh0+LNBj)ZR zZ31D`hol?DTF(?R8U1`-+eo9hhDXv~jp6Y5c`1)K4=T`fR*CWYDjHOEEK0JRJS)wm zl1fswrB2V)CR9$6dEkgfMNy<^R@Dy*vmcthwtL{o1%LUE?3(#xv1+#Q`&WhStF2ZT&0$&Wb-;_D9zT-u8+&QuanZa$2mmYJfNbB~$ai zKC}==^M`~(fzFcWz8hUPd?nWd6=7dV*mv9B3_Sm?T44E8IS3lOGBnoIe9%N*HQ5jL z8DDj~4t5(~?dD<3yp}h)5c|6&!nHGpFc9iMg%LL++S^ccWsU4$Q^E;Oy#5Q}9nOpZ zOh?!yTVMYk7^=o(CKD5=K8Ci*ZktXmUZS2h8OHWarb!qv2*Gq7}w z9rwgR=gXdjUd^B=Lv_^^FXX|UrFEGx6WzxKo0^MvwC~sO(7S*js6{#78j@9yuWE$; zZGT^thyFt|v3jZ&90|nXS+l~3im+)O)vY%R3^d>qfG(41Lma(MYwT0k1-94w<6^>+ zHz$N?9=$2G7jbHuPY4@xFvc#n)J|>H6!+@S8)<_FLgBL#rayPj$T^Vd1kKt>g3p_$ z`FJzy@`mp6kRyOB=b#v&=Vw~#r<@$07Ivc#K?{=y0d}mU6JIIFx_n`-jg9%jVRJ(d zh=z6o5RYco8tBjoJOJ&Y-bJu0e%{L@tiv@c0+^e+wLbv*wz{YWpj&6^=RplMW&I4G z+w<1_)+vyX&_){o-Lcet0zHFeeBt602&N~HOe2W^nSzYxl+Mp*3Mpx>0NGGEQU`nh zXh{Y)>Oo%AN%iDt`fNIz%*@qcJ_*xHeOvIoo)g4+hONPSQJjqV=_rb8#0LF3K0bm3 zLxaYUpkj185|ppI;RSPJmrG*{10zN`0ItU#^GJr%&1L)Co2uRGPhuJBdz*sBl z(1pRK+VyzRb3j0=3ba(Ru^7OZl`;^zk0&z)iDIoOqv8;xm?0WT!c~)1kJdEsoJ8g` z5CzMm>LKo?rx%`DV2}Er*k3i1&hC;av|{mJvfr|FzhuAmP^Is{t-b@d-GPcb0>6?w za`~}qJKuEj#v%qNqFhhH6ep83`~>yZ>(h z>jubV%PoF>5#}zk=UOs7B8-+igUNh)aPh*<+QrCAPAnB0kL)kTuM}w`IjN3%p^04d z7>M|yH+mMAW2SMBaRCZ+UzZ^+fTS&L1gf9i zHBNSgZ)fKMKF-OGdt2F0-In6PaY+%AqMVoJ@%u!qeXoc$AH{1sdPwZcWiuDV^cgIe zwX588jdXMH#4KB{RRdM+ZX3u7_QHbU?hUp=Alwi_@T9snUo2H%@(M&$=ahDP!Lks% z^hjCg{oK3cjczkQlf`jSdh%@5LU_j~Hb9+KSKCX*((dtFu8EQ`p}~uGjj>f|gOY(qT)kAXDAzroNDp=}F`mFXHpqgo}07#&k@;NA~usBy8wXZsT z!3Zy+)uCFwrxj4DF<($9f-}t^L9|fqdoVEOba9#+Ywt|^kV8bG)wsgm#ayb8k@nH= zz#JAgvf03*!Lao$a^x*?`p+cHCW71D@HzN_kr+m*2K-9g#V!WlX@ZIg=ZZvUD{+^wbX(2a0uxxx9}@Wt>Cyq6D^V*B6NHo6?X$&LNh z8@v={gMSK&rLLiy!CfCCx}ewtAQp!3HBs9aE)9+2mWeg+;?U+z=+e09C}(@$pt(1^ G$^QVe`t30Q delta 1906 zcma)6O>7%Q6rS1j|2pgS@7j)IJ3n^fG;Nc{ZK17N708d;Ld^mWl)Ax+mn6bX!mM3- zB9S;D5KsmrB&1$Zg<4h035f#|SA;5oAX-rYQV%^k1i=L%-do#oVyUPj?YD2=y!Xx9 z_cQNYynR$YAoq9(tP8e(m%oy4$Wh^raARa;Jw-~ipJ*=4eTZtF;{w_cQVW$rg#%4_ zFKSXr(Y$S|lF&~|o;+<@Oj4~!C7P^~s#2x-mRl`i@%uDoAHP~s3lm^6xtASeIKWv_ z#^N1y=Qz!;`LB>G75<8Db>C{MX8WG2Gk6Y27aKf*`FU*%q5 zcp?g3u`aJ(@OrZA82HrMUMI!AlFG+vSX7&5^Y?_1Go|?lNiNC17w=Na*KN_we{3q9 z>IKgpcnlOa$lt_CBijf+4jgOX`|BC&a|gD`LaRn76FWR2A-0_dgum=CsKCE-tT>7y zoFeiguCu;dB6t1*`3+pZyZ&c;;mV^RK^yH7G~AZN4bG>h~1-Eq$_e0t$A zF7dnWIcZA@-?N2T0yO+{&rdYMnKVG7{8Q;rJcedi{sD#+V;H^#34ULCi6%BDy$`7) zhuTrzFOSTOfoO{5YBlF#O*QUeqcPlKQG|mCM*vLMRoyVkivTY8%v#He^CLN8KLM&< z{-yjGP4H)Y^T#9Two8x`m;)6OK#sCUMmoVwUxp?=R(>tukqn1~VOO$I0Mov(T3@N< z#11h#4SEA|jybb_+f)|y+I)S5>E+72WzWvQ_BcQ6pMu!x{x@bZHq+DkoB8ERhwhfh z#$ogEf<4Jc0*8T8NyIka3B(cB~S{+6sg{3+5;IR_n!{p zR>m4m6kWutY`a0Snr;Exv%RpSR=eM!o2SBQYAf0cLH>InKCX~yKOt|yY_P@4;kNzU zbkUi|TER+@^Fcz~BuR=wK}9E;;s;eVP_(tLuoNlUU~-&%Hky5Y3Vhf!!VE$Z;Kdv@ zd-UrI)p|vTf*X1**JE|+p0+uM#^(`mHdz`0eOW(G$3p9aC=LO@1X$I&h>HCsGo@zM z=OOiF)BgIhUagq+YvpQP-yMWBtY-JgE#r1k=YS9+HogVeAPt51{2wm8yY$K1Kge0$ zh+U^!{EPTe=av-Mc#b7_U;it^>?}s{G{FDON{Rp03+=b5B#u#~D?KVN_Km%;ryr4U ze=bZ%MX&16OjZsqfI(Mp%FX@V_IwpgF7um%N&Z)GjHi+V4!nhOX|4?2R!j$5tpk~9 zTU#}1Y?#xGI)itDHGEcUo8nr%#xNi35(4tE6aw-zv*$W>b+uBj>ZjQf=@(!hg;@RG>LgcaAm$5E~=>UUt;;hv21WEb9LN$#PvN diff --git a/backend/app/routers/__pycache__/products.cpython-314.pyc b/backend/app/routers/__pycache__/products.cpython-314.pyc index 1018c7b4331fd423d650d51d896d7bb3f7bc8230..46554beaf1404c8e19c4f3182e5a4f8d3a0313f5 100644 GIT binary patch delta 6168 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 delta 4467 zcma)9drVu`89(>>0rs`c!!}^B!C=4`2+ssUnv#+Sm^>EZEY_BV5Q8tljj_$S*I5#^ zbvA9))Rrmjp;feG+WwfdRb4wev}uz%snMkVkv+1BN=>g)^^aBCAJsHxsg|vqs(s%v zwiD-hk-zi$zTf%IcYfzPhhM)Y{QjK3%Vsqb`1b3+h<(4EkiTFf|JgPwx3<0Pf1)8M zsZtX;PD1)gOVFxXgErO1+lI-PpY>#dPSqK#QEPZt`DAUdPOS^NR9CQGt>=BF$%dd? zbq77FC)lVq2AkBTpjY(x3{_5Br(NCkcl1={jY8FT{~agC9n)ennXcX}^|VSPz`|BmVkHPA3Rhy?FtoKFL6@{xd16s zUjnrWpr(r}&(|O(4}{{tzQX#&Py+zFOK^JuH zy1YYoue$_upBQQaP;Uw7-~*!2TmUr!p;`(pWPp#QbWMiMXvtP|&6$$XyzZbFYKIy9 zB{OaTyZi7X)RDKldl`d5C;%v(B`8Bhl%4rVU>WLqAWS#FY$|~n4psX|pod-6A6fGo zo)gS9fT4rmt^I31GjXJq))G$ilsC|Jhm89H8DCHFj6aM zXu4QJ)pUwVHN$*78BsO;Y%&?AX0}>>I@`0=gTV_&OciFI<$x7I=#&)n#u}N+x8I!)c1j8p|AuzdM~It*C6?-RvPz$ceP_VIuK8>ZP!b-f^hdLkeeSW@ zrLb7g87u)BX>{zIvgf@jmLU=rEhIz+ba{XBB}}O+z?J%SRq{zvSTC3MzhrZ;zc*IE znBl%-BTYDFyl3n!3*wdC)Bm}}XOP0ul!xu@aM* zMiREb2@o`)E#TA)OKF*&rIlc;l_gVZESXR!T4;vFWK@o8#`#!Wl_|w7pdBc1BFzws z$4<$#lf6*gYBDD0=M`C{eeA#0%|^UN0yg%)h90)hZr-;YZMHD*%Z?%8*$m+ze z`d8iSp3(Kn9jw!_!hYbqB8;#|&C+hT?ujNW(OxKNABuhu0UZTi5;}ka6GK3tLr^Gq zEw*r9C?0bz_OY7Ueqm%SSUVtQ3OIps+JGA4C?-(w*os5WT_1F_y>dE9djd%*?X-{ zU|l)8)M^sUT=U)5a;Uw%+s;nI?;owT(#G2bI4iO-mqVPF*_GCMG&4sJ^SmHV_tFtShEMl&W_3$9T}YLB%SIy!}#NP=AOF(*Rk zbNrJ|$_4t-ufWJx;itR-0>W==`k}aP>peg5u~dD-*6P_86wfeSOS=4$9^Oktp@QhrajHR*3k=0d$Hq9eFfgHa7YaY@D$R+Y+}=i3?~-n z8Ln3|M^dRCeo7UJ&mhW=+728NV^O%fVifK$B%-EQ;^~vL5taDy)h8m0GC%dS4#&%= zJWpk1fpP*PZHvqfm^PNxgxyC`@YzsRGtEX6d4{9Uv0Xjg!Z1tq)EQzh7F%2H`KGe z!+9ZNtr$DL#KQ5sW1WT^IZmN^!K)li5Qm>pI?TQp^cWVQ{XOR0{9bPJ#|q0U8p75W z^2;N){^#slTVU(iiybcZhb;#rI39$48O0ISHneFR-}ihmfLdfQMoq~vxIM?%)t=dF%f5aY32exI;gPoU49?N5tFFWRNq z@~9uY{l#ck<}7po!_PsX8R0<5iKteNQ}GjW_gd&PXg!Ex0?o?lH?fY}K%WJnS#v9q zqcdq5SLpLNz*qYm)-oWJauAs7@q;~MGdmiLFF@ZqSv$Yu+rnPXBxK*~!XvMyn+RwJ zfzME#Fmw~e$}lhJ$lAfNGr}~_36-FeJNV^MPK-H~@;qUPDT$;?_rN$X3#ZkLvow;3 zDqKBBuKdMh#`L%``ULe$aiqewRUj#kA(W7W8(;b z?$8S;_Au*sV-5O3y&yD`5<4d=Gx)%mWMkuw8crG$I>SfkCD6J}*s1a7c`gWSWw*zl z8nP)%@ko4bL0&xDlcbBejKW_wM)hn8&PI+y{J~$Ail__m*etcN=O!AQ6*%_^6g+TM zSgU4lO}GLWZ0bOPSxR$Y23BNxIyNUOJsXLQ;y)nl(+O8btGa7El2#X}8|_TkpH^eQ z5zeqi?BwZuE}58*o#e+yGty)l5~QYsrSiuRe-iMENz6_4pPamZhuI#K%5QLA(!4Js6k4Pt5 t4<$VB@SjHZD4U(!w)WxVF+q>e{|8)Pe?$NP diff --git a/backend/app/schemas/__pycache__/product.cpython-314.pyc b/backend/app/schemas/__pycache__/product.cpython-314.pyc index 9342840ade202459f53f4ab66e76b0c0ab836937..dac3d421acafc2d1b66e8f0124ed7d1cae19898d 100644 GIT binary patch delta 2019 zcmb7FUuauZ96l$xx%spFYjV@H>5?q}bDOktOE<92G3hqkx@GguPQ4zu!qx+ENuSobR0bopaB> z@5`5OGC$_sIk(F};JF_S+)^B0xGALz+)FcWY9`$_PINmIheq`SP&=V^X=dGho#-A- z(!Edyfb&7|UnK>qS%PH2rYoAP2d)x*P@@T=THCJ6tUk9it52~?S+5k^@=UGTsJuOo z>*B-j(jX1-C)ViNBRWm_cU0k@*=^ivQe2)i47fsHqfpHJkU2PJdCsH_^jK{Bc8rko zAu*!>==1ZROgX!PBNAjaz~{{Gj=2}h)mo{#Se~zxme@ku&B}VUHeV{gRbjxjoxS(j z`ch3_`^9Xg^aB4?YM7f+h+nnL-wA|Qt}I_{O4&}BP}+$QAZC^?H6^tZMdA?gkE|4y z$C^^26GI|Se1lCX+)3a|k_-fz(!ov&U()#PE02{_Q_6QT$Yhau`P0NFuRc~XO=>7W?geuwutG zfWPh&gRF-l#_9EN%sA6Zj~d1GNZfd_9ptyH z6NkW00Vv=fJt%x-622M&?+t^mLi|f>o_?_Q#QHVm&)U3T7AK#9`g^EXp+0Q3@vrO( z9pInaN2rhg0O;otdv3aC1?GgsRV$OAVsV57LK4A(kV3$FQcVoq!^CCc-s491HdTJj z5tSprG;Z;`j*Wk|#pqsJq_=GmT1hTPno@e(8pA8fvb!mz{+B%%-n5nF0o4)yj8oz3 z2VUYSho=w&iXA~Xicmn90N81Z<47Wiv)tw-=lMHbmB9_Icp6j&m~O>V`>8BM#;q>P7`+#|wt$34pMe%XXM z<>w!HMj+XyJ-Nw1FSGWWZLrs8g>Qo0YU*cn^_L4(r3i@!&HmTcXb&Tz?pN)mR) o7%Q6rNe{uGdc2>;EKmV#j}R)-et=D4>FhMMIS)$SvEd2vI;Laf_w4j>a1f zNDx<`A|wt$LnU%RsK*{rPN!GTUigk!l6?rK4r?Dw;~bf% zmTQz;(rmva+ktb$4q7x#Or@irX7#m=Rr@%rR_to|1aE0k>1WDs8~L5z=_@p#yd+t^ zX^47;zKyoQzi`F)x=Z5^rHm(lJ85z=$bWHtv~yLKC>`UUDGllB3V*CzTna{8@?>|C zP}+@?K%^y4bQ8FkB9Y1MH}8hCExFK5q9=u(vp3S;zI8X8Ystk2Y4Gl1x;Kd#;=id2 zejhBDA0dDc;#>MGueeKzG%Onwpu{q`DhWy>mdlO; zrK9|oR-g;~mXX+Td%mOmvDZ(1{7-MpWAq3l{3};TkoTcCv(h7vjX(&~&18Ia93g=) zg`glL5ik`~Vkxvmz7klerju}%|1gqJW8i7L!0(OhZUzr;XRgOv^7K>g$G5}ReJwfr zzxZc43^xN{jxiJMJi;tO0YOI)burND7l(hMA1gkCo+82=!m|K_MLL2`1o7+&f1)pM zrlz49$?VW-^pCHC@pK?(ICe__2g)>OyP~8{A|y#HI!Y|*c_a*mEf2^+0Xe8pJGZ5P z9D-`c=;^_#HrDG`8dZMZm!*q5WaQV7hO(&+g+n2> zWk)?;zjC2=k-Z3uMVJk&={3?m9RJdAjveJUjB)86-MMXS&~YKR0qOaBwj{df}+ zonTVMvNoRMH1x+N>O9hKE!25{mv}0YDLbK+p`k@T zAFL}Y;ROgwFdN9@HS(*hIeC=$*O8Jbnq9mI&k032+oCbFmoLMg@TKZ8w#fg9B<2Hj iZtLV8fzRH|pdF=&t=b-e&)yMAJ>Q)A8#3^Si~a@Z1xT9! diff --git a/backend/app/schemas/__pycache__/user.cpython-314.pyc b/backend/app/schemas/__pycache__/user.cpython-314.pyc index 800d4cc79960f04dc0c1b7a58db3e9dbc778323a..e2ddb5223c0afd7196d348b7a27e92b81974790c 100644 GIT binary patch delta 20 acmcbmd`p>In~#@^0SG!T{@=)bUJw90ss>8{ delta 20 acmcbmd`p>In~#@^0SJDw{@ciXUJw8}?FH@t diff --git a/backend/app/services/__pycache__/auth.cpython-314.pyc b/backend/app/services/__pycache__/auth.cpython-314.pyc index 4351b98caa6cee1bbde1ad765c8ebd50106a33b4..97a15ffaf0dbe2dcd7725dbf025129d583861b78 100644 GIT binary patch delta 1532 zcmah}O=x3P6uvkAX?{CR^V0mZNn?MK4sphrnvt0n94XRSl=ju1b|l8vIZc6kuO?2LX+WBQoJ+HpIpCr}<&a!$|dNz^pb+T5PhQ>aZS-;|z4 zIiuu!ZKS|znadm#uHav(no?1_ zW~});{1+vCo6=3f6>pjD=4!Y2U^Jq=T zOWudoH2DKVM-J5z2daig9uJF#Fs*L+1@JO*EYAI_k)6o6Sg9M7I%?K#1f zyA9E^&2DEv*++x5B&2s-)NM-WDBD<8!O=ffwT(x7o4J z8sw7vD?Enw5l6U>t>_*}myRsgyH7f~;HVO9PdEzZ#d zEh>w{JH7hw$<+_|ZK8AOxE#C6HxzAGbH^Dmo1$ZzyQYA_MW`k`Fp9DNbOLcy&+24d zejZ=MPJWI5$oZE1>Rk0AZJAn2WcWPEFA%89-a^Uo>{|i`ga^ASD`T41K-apwF?Q%F zqJ%fQBu5h2l;Rs|fKY6WwlzqZlgkM$oyW-kTvQ>uiN}%E$B9q4uYpmpDOZy-+c!z1 zmf$4>$7MF5jsg-@L5l4vxpjh95Kedw2OFooZ0rNz@aohE+`=d!zfKVCg4Ih{Er9R+7ew4ZpZc}}FhqF+SPAco|q1=~$rmh5OMkT&hD#~jU zUmiMv0|Po{r)4?OU9)WqIMoNwGhhkiW7>W71yBzOXrF-=18DN93!wa;GN9z@5}wpfPO(MD9P_YoesIp+`9{C$?W&*mRUk=BwwvDhOY$97y37s`%hi~ delta 1367 zcmah|OHUI~6rM{vwS_)yWo7_NEAkk8U_?L^4aOiEAAwPcnpB*$gN$NJ&P-KYKuk2a zGO0JwjXT}A)cOO6F){AkI&o=S>Q*+!bMDmF250fjdEIlqbMCpHhrOZrj(DtD!f##v zVXq`=ag~kNdTT2MIWHM4yO|L+Vk1oyAW5!Ti07q!z9PAr5mzK5p-2l!x6MeRoDy=o zvDHYUmLY9{xgEw9)LMmatD&H*3OQS7&PxStAM+CmO=)OD(qNOJVQ5<;NvCjk{t6ys zMmu^t8s40-xl7Ws{3%9#P33{_SW-RcAoC@t4J)Lv3smc_4?PfGmFz z>SB4m9Mkxh(6=33=+MKk9e-YM-gM@@$i(fUwdmTFvLNJz$hvq7`W}T9btmP~2?W^y zN`fmN2rKd+YFU0Ve4m}+AHo%;^6`kaUl0p=!IE8cL8hbB;(v+u^IBvN%h%sTzB1Ow zU$%6IhUnZd|Ab4>$y=hDJb{LOu16nWL$9K9hs8)_w{qPogD4viWkgjkV3*yECNs)s zV!c>!Id+#F+)Jh61mgrp5WK)u%Z1~lZX)O*Tjbo*qBQ|f0T@7Cmtm40NObkmh#YDb zr}OJBqm8@t`Aws9w0Zf=zHH6fUr9Lt?!*l78 z)3hgIv5?YPlFt!{8Z#()!K!0{&+yN-rOc{3ZDV-X*4lmX0*Q1OE+TkM zb_oh7U^5~}bTmosDT2!gjb46FJBhb7TdV>gLBExGj52v%so}QNm8ntDL-d~z;tvUg zjiz1YV=6tNE9w(g-hfKvG7!eciorRsup81A5rcsMKkU7OBB J?U%&0{RA=m7BK(- diff --git a/backend/app/services/__pycache__/product.cpython-314.pyc b/backend/app/services/__pycache__/product.cpython-314.pyc index b593364a4923be539690f5b32f6228ebd492ddc5..e4ae8f0f07c92089f294bf428c2364b32a92d5d0 100644 GIT binary patch delta 661 zcmaJ;OKTHR80|Nin`Dws9?Xo7ghZP*%G4TaO-Y;97g}SqlmtW+qY^t~iOr+lnP6R1 zSArlY_@N6CM0Y;GN?f>c=SsS1vxv@b5Erhq@ZO}LD?hmB9=`9~bGi4tKKL#r9|*|4 z0anGm+Rg4q`MwKZ$dYhMz_7A{MMaDCrd;v2($ME=0fS-`WV|OH!jhQiu^9eT6#TH= zk71gq*cBuF8K^i(lCTpmlNdfD3O*!$h~ncw#4|kb1{U-HekKXYyI8i(r3Sr&Kga{$ zes-IOE$bUDyGKG_BOAHSd}(vO)IM>gJ$SYC#QjRxm0$u#s2C2pQK6Qt3shzuI*R9{ zVMw(aQdWQoeCr>BaqReKVFuN~UohHo$y;z~f=SQo;K=6cVzp_Q*P3<9v~@2{agQ_y zE}@eQ98$5(n&o(yqHNogX82@^f$rJ9lQ)iV$YLsZ9OkeQ?1GNf(Cr_*>*RdGS};VO&a zu3y5ZB<^7^g`_Uyb2Xl%y^j;?<(kP}R;?_v?K&;j4Vq-ORN=4>zpK-}0;4C{vL0bn z8w$NY`{{NkliSSX+GA(hQXY?KYf!{5+R_vctp9a0oXv5_bKn;AFo!6I-3%P>Y^`B5 NtL9O90ZThh{{h{kn$7?K delta 506 zcmYk2K}Zx)7{~i&_U*beJ5B4nw=R{ttgYhUu3|08E`g50>z6m;4M(-(7{ulnoFmmlTe<54!vh0J@|h7-~Z$PeZ03f_^xUVT(^vC z^1Ptm?V|&0T{oD#>9Wo_w)91~00q1zb4C=xz>&6aqHiW@;>9K3!2kQY(zBKye!j!Dw1Kuag`e~*aeM!F6@+IlT zT6;QXGi^TzUCpHufb))q*0Qn8%Q#LH{>eHyc$U45eJ)JBMslV+tuCDL z9?Bpq3aANTmZj-C3cYwL>c$f(AIb{WuqjIVX?g&k#0s@Ao|`SIPxLRI+fZsuVM0Nr P{JS{G
- 👟 + BM

Brand Master

-

Your ultimate destination for fashion and footwear.

+

Premium sneaker boutique for collectors, fashion leaders, and modern street luxury.

+
+

Quick Links

+
    +
  • Home
  • +
  • Shop
  • +
  • Sale
  • +
  • Wishlist
  • +
+
+

Shop

    @@ -30,20 +40,15 @@ export default function Footer() {
-

Company

+

Customer Service

- -
-

Contact

-

Email: info@brandmaster.com

-

Phone: +972 53-244-1361

-
diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index 104d1f4..d0d1fbd 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -24,7 +24,11 @@ export default function Navbar() { + +
+
+
+ Total Orders + {stats.orders} +
+
+ Wishlist Count + {stats.wishlist} +
+
+ Messages Count + {stats.messages} +
+
+ +
+

{activeSection === 'addresses' ? 'Addresses' : 'Personal Information'}

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +

Shipping Address

+ +
+ + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+ +
+

Account Settings

+ +
+ + setPasswordData({ ...passwordData, old_password: e.target.value })} + required + /> +
+ +
+ + setPasswordData({ ...passwordData, new_password: e.target.value })} + minLength="6" + required + /> +
+ +
+ + setPasswordData({ ...passwordData, confirm_password: e.target.value })} + minLength="6" + required + /> +
+ + +
+
{toast && ( diff --git a/frontend/src/pages/Register.jsx b/frontend/src/pages/Register.jsx index 43e5624..fa4ff6f 100644 --- a/frontend/src/pages/Register.jsx +++ b/frontend/src/pages/Register.jsx @@ -60,73 +60,86 @@ export default function Register() { return (
-

Create Account

- -
-
- - +
+ Luxury sneaker +
+

Create Account

+

Join Brand Master and access exclusive collections and member-only drops.

+
-
- - -
+
+

Create Account

-
- - -
+ +
+ + +
-
- - -
+
+ + +
-
- - -
+
+ + +
- - +
+ + +
-

- Already have an account? Login here -

+
+ + +
+ + + + +

+ Already have an account? Login here +

+
{toast && ( diff --git a/frontend/src/pages/Sales.jsx b/frontend/src/pages/Sales.jsx index 1d1095d..fd23700 100644 --- a/frontend/src/pages/Sales.jsx +++ b/frontend/src/pages/Sales.jsx @@ -30,8 +30,8 @@ export default function Sales() { return (
-

🔥 Limited Time Offers

-

Huge discounts on selected items - Limited time only!

+

Limited Time Offers

+

Luxury selections with exclusive markdowns. Ends soon.

{loading ? ( diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css index a2f2bf9..32c9bbf 100644 --- a/frontend/src/styles/global.css +++ b/frontend/src/styles/global.css @@ -1,818 +1,1036 @@ +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700;800&family=Poppins:wght@400;500;600;700&display=swap'); + +:root { + --bg-base: #050505; + --bg-elevated: #0b0b0b; + --bg-card: #111111; + --bg-card-soft: #151515; + --gold: #d4af37; + --gold-bright: #ebca62; + --gold-muted: rgba(212, 175, 55, 0.24); + --border: rgba(212, 175, 55, 0.2); + --text-main: #ffffff; + --text-muted: #b8b8b8; + --text-soft: #8a8a8a; + --success: #67c583; + --danger: #ff6d6d; + --radius-sm: 10px; + --radius-md: 16px; + --radius-lg: 24px; + --shadow-soft: 0 10px 30px rgba(0, 0, 0, 0.28); + --shadow-gold: 0 12px 40px rgba(212, 175, 55, 0.14); + --surface-glass: linear-gradient(135deg, rgba(20, 20, 20, 0.86), rgba(9, 9, 9, 0.76)); +} + * { margin: 0; padding: 0; box-sizing: border-box; } -:root { - --primary: #ff6b6b; - --primary-dark: #ff5252; - --secondary: #1a1a1a; - --light: #f5f5f5; - --gray: #888888; - --gray-light: #e0e0e0; - --border-radius: 8px; - --shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.15); +html, +body, +#root { + min-height: 100%; } body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif; - color: var(--secondary); + font-family: 'Poppins', sans-serif; line-height: 1.6; - background-color: #fff; -} - -html, body, #root { - height: 100%; + color: var(--text-main); + background: + radial-gradient(circle at 15% -10%, rgba(212, 175, 55, 0.13), transparent 40%), + radial-gradient(circle at 85% 0%, rgba(212, 175, 55, 0.08), transparent 38%), + linear-gradient(150deg, #020202 0%, #050505 40%, #0a0a0a 100%); } a { - text-decoration: none; color: inherit; + text-decoration: none; +} + +img { + max-width: 100%; + display: block; +} + +button, +input, +select, +textarea { + font: inherit; } button { cursor: pointer; - font-family: inherit; border: none; - border-radius: var(--border-radius); + background: none; +} + +::selection { + background: rgba(212, 175, 55, 0.24); + color: #fff; } -/* App Layout */ .app { + min-height: 100vh; display: flex; flex-direction: column; - min-height: 100vh; } .main-content { flex: 1; - padding: 0; -} - -/* Navbar */ -.navbar { - background: white; - box-shadow: var(--shadow); - position: sticky; - top: 0; - z-index: 100; -} - -.navbar-container { - max-width: 1200px; + width: min(1320px, 94vw); margin: 0 auto; - padding: 1rem 2rem; + padding: 2rem 0 4rem; +} + +/* Generic */ +.section { + margin: 4rem 0; +} + +.section h2, +.sales-header h1, +.products-page h1, +.product-detail h1, +.cart-page h1, +.checkout-page h1, +.auth-container h1, +.profile-page h1, +.contact-page h1, +.orders-page h1, +.wishlist-page h1, +.about-page h1, +.messages-header h1 { + font-family: 'Montserrat', sans-serif; + letter-spacing: 0.02em; + font-weight: 700; +} + +.section h2 { + font-size: clamp(1.4rem, 1.1rem + 1.8vw, 2.2rem); + margin-bottom: 1.25rem; +} + +.section-header { display: flex; justify-content: space-between; - align-items: center; - gap: 2rem; + align-items: flex-end; + gap: 0.8rem; + margin-bottom: 1rem; } -.navbar-logo { - font-size: 1.5rem; - font-weight: bold; - display: flex; - align-items: center; - gap: 0.5rem; - white-space: nowrap; +.section-header p { + color: var(--text-soft); + font-size: 0.92rem; } -.logo-icon { - font-size: 2rem; +.grid { + display: grid; + gap: 1.25rem; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } -.navbar-center { - flex: 1; - max-width: 400px; -} - -.navbar-menu { - display: flex; - gap: 2rem; - list-style: none; - flex-wrap: wrap; -} - -.navbar-menu a { - color: var(--secondary); - font-weight: 500; - transition: color 0.3s; - padding-bottom: 0.25rem; - border-bottom: 2px solid transparent; -} - -.navbar-menu a:hover { - color: var(--primary); -} - -.navbar-menu a.active { - color: var(--primary); - border-bottom-color: var(--primary); -} - -.navbar-menu a.admin-link { - color: var(--primary); - font-weight: bold; -} - -.navbar-icons { - display: flex; - align-items: center; - gap: 1rem; -} - -.icon-btn { - font-size: 1.5rem; - cursor: pointer; - transition: transform 0.3s; - position: relative; -} - -.icon-btn:hover { - transform: scale(1.1); -} - -.cart-count { - position: absolute; - top: -8px; - right: -8px; - background: var(--primary); - color: white; - border-radius: 50%; - width: 20px; - height: 20px; - display: flex; - align-items: center; - justify-content: center; - font-size: 0.75rem; - font-weight: bold; +.loading, +.error, +.no-products, +.empty-state, +.empty-cart { + border: 1px solid var(--border); + background: var(--surface-glass); + backdrop-filter: blur(8px); + border-radius: var(--radius-md); + padding: 2.2rem; + text-align: center; + color: var(--text-muted); } /* Buttons */ .btn { - padding: 0.75rem 1.5rem; - border-radius: var(--border-radius); - background: var(--primary); - color: white; - font-weight: 600; - transition: background 0.3s; - display: inline-block; - text-align: center; - white-space: nowrap; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.45rem; + padding: 0.78rem 1.4rem; + border-radius: 12px; + border: 1px solid transparent; + background: linear-gradient(135deg, var(--gold) 0%, var(--gold-bright) 100%); + color: #121212; + font-weight: 700; + transition: transform 0.24s ease, box-shadow 0.24s ease, filter 0.24s ease; } .btn:hover:not(:disabled) { - background: var(--primary-dark); + transform: translateY(-2px); + box-shadow: var(--shadow-gold); + filter: saturate(1.05); } .btn:disabled { - opacity: 0.6; + opacity: 0.45; cursor: not-allowed; } -.btn-small { - padding: 0.5rem 1rem; - font-size: 0.875rem; -} - -.btn-large { - padding: 1rem 2rem; - font-size: 1rem; -} - .btn-full { width: 100%; } -.btn-secondary { - background: transparent; - color: var(--primary); - border: 2px solid var(--primary); +.btn-large { + padding: 0.95rem 1.8rem; } -.btn-secondary:hover { - background: var(--light); +.btn-small { + padding: 0.55rem 0.9rem; + font-size: 0.86rem; +} + +.btn-secondary { + background: transparent; + color: var(--text-main); + border: 1px solid var(--border); +} + +.btn-secondary:hover:not(:disabled) { + border-color: rgba(212, 175, 55, 0.48); + box-shadow: 0 10px 24px rgba(0, 0, 0, 0.35); } .btn-outline { - background: transparent; - color: var(--secondary); - border: 2px solid var(--gray-light); -} - -.btn-outline:hover { - border-color: var(--secondary); + background: rgba(212, 175, 55, 0.05); + border: 1px solid var(--border); + color: var(--gold-bright); } .btn-danger { - background: #e74c3c; + background: transparent; + border: 1px solid rgba(255, 109, 109, 0.4); + color: #ff7f7f; } -.btn-danger:hover { - background: #c0392b; +.btn-danger:hover:not(:disabled) { + box-shadow: 0 10px 24px rgba(255, 109, 109, 0.17); } .btn-icon { - padding: 0.5rem; - background: transparent; - font-size: 1.5rem; - border-radius: 50%; - transition: background 0.3s; + width: 42px; + height: 42px; + border-radius: 12px; + border: 1px solid var(--border); + color: var(--gold); } -.btn-icon:hover { - background: var(--light); +/* Navbar */ +.navbar { + position: sticky; + top: 0; + z-index: 60; + border-bottom: 1px solid var(--border); + background: rgba(5, 5, 5, 0.82); + backdrop-filter: blur(12px); } -.btn-icon.active { - background: var(--primary) + '20'; -} - -/* Grid */ -.grid { +.navbar-container { + width: min(1320px, 94vw); + margin: 0 auto; + min-height: 84px; display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - gap: 2rem; - margin-top: 2rem; + grid-template-columns: auto minmax(180px, 1fr) auto auto; + gap: 1rem; + align-items: center; } -/* Sections */ -.section { - max-width: 1200px; - margin: 4rem auto; - padding: 0 2rem; +.navbar-logo { + display: flex; + align-items: center; + gap: 0.72rem; + font-family: 'Montserrat', sans-serif; + white-space: nowrap; } -.section h2 { - font-size: 2rem; - margin-bottom: 1rem; - color: var(--secondary); +.logo-icon { + width: 42px; + height: 42px; + border-radius: 12px; + border: 1px solid var(--border); + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1.36rem; + color: var(--gold); + background: linear-gradient(135deg, rgba(212, 175, 55, 0.14), rgba(212, 175, 55, 0.03)); } -/* Hero Section */ +.navbar-logo small { + display: block; + font-size: 0.62rem; + letter-spacing: 0.22em; + color: var(--text-soft); +} + +.navbar-logo strong { + font-size: 1rem; + letter-spacing: 0.08em; +} + +.navbar-center { + width: 100%; + max-width: 360px; +} + +.search-bar { + position: relative; +} + +.search-bar input { + width: 100%; + height: 42px; + border-radius: 12px; + padding: 0 2.5rem 0 0.95rem; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + color: var(--text-main); +} + +.search-bar input:focus { + outline: none; + border-color: var(--border); + box-shadow: 0 0 0 3px rgba(212, 175, 55, 0.13); +} + +.search-bar::after { + content: '⌕'; + position: absolute; + right: 0.85rem; + top: 0.42rem; + color: var(--gold); + font-size: 1.12rem; +} + +.search-results { + position: absolute; + inset: calc(100% + 0.5rem) 0 auto; + border: 1px solid var(--border); + border-radius: 12px; + overflow: hidden; + background: #0d0d0d; + z-index: 5; + box-shadow: var(--shadow-soft); +} + +.search-result-item { + display: flex; + justify-content: space-between; + padding: 0.75rem 0.95rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.04); + color: var(--text-muted); +} + +.search-result-item:hover { + background: rgba(212, 175, 55, 0.08); + color: #fff; +} + +.navbar-menu { + list-style: none; + display: flex; + align-items: center; + gap: 1.3rem; +} + +.navbar-menu a { + color: var(--text-muted); + font-size: 0.95rem; + position: relative; + transition: color 0.2s ease; +} + +.navbar-menu a::after { + content: ''; + position: absolute; + left: 0; + bottom: -0.45rem; + width: 0; + height: 2px; + background: var(--gold); + transition: width 0.24s ease; +} + +.navbar-menu a:hover, +.navbar-menu a.active, +.navbar-menu a.admin-link { + color: var(--gold-bright); +} + +.navbar-menu a:hover::after, +.navbar-menu a.active::after, +.navbar-menu a.admin-link::after { + width: 100%; +} + +.navbar-icons { + display: flex; + align-items: center; + gap: 0.6rem; +} + +.icon-btn { + width: 40px; + height: 40px; + border: 1px solid rgba(212, 175, 55, 0.25); + border-radius: 11px; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--gold); + background: rgba(212, 175, 55, 0.04); + transition: transform 0.24s ease, border-color 0.24s ease; + position: relative; +} + +.icon-btn:hover { + transform: translateY(-2px); + border-color: rgba(212, 175, 55, 0.5); +} + +.cart-count { + position: absolute; + top: -7px; + right: -6px; + width: 19px; + height: 19px; + border-radius: 999px; + background: var(--gold); + color: #121212; + font-size: 0.72rem; + font-weight: 700; + display: inline-flex; + align-items: center; + justify-content: center; +} + +/* Home */ .hero { - background: linear-gradient(135deg, var(--primary) 0%, #ff8787 100%); - color: white; - padding: 6rem 2rem; - text-align: center; + border-radius: var(--radius-lg); + border: 1px solid var(--border); + overflow: hidden; + padding: clamp(1.2rem, 4vw, 3rem); + display: grid; + grid-template-columns: 1.1fr 1fr; + align-items: center; + gap: clamp(1rem, 2vw, 2rem); + background: + linear-gradient(110deg, rgba(3, 3, 3, 0.92), rgba(11, 11, 11, 0.86) 50%, rgba(212, 175, 55, 0.08)), + radial-gradient(circle at 74% 18%, rgba(212, 175, 55, 0.17), transparent 35%); + box-shadow: var(--shadow-soft); +} + +.hero-content { + max-width: 580px; } .hero-content h1 { - font-size: 3rem; + font-family: 'Montserrat', sans-serif; + font-size: clamp(2rem, 1.4rem + 2.5vw, 3.5rem); + line-height: 1.1; margin-bottom: 1rem; } .hero-content p { - font-size: 1.2rem; - margin-bottom: 2rem; + color: var(--text-muted); + margin-bottom: 1.8rem; + max-width: 520px; } -/* Product Card */ -.product-card { - background: white; - border-radius: var(--border-radius); +.hero-cta-row { + display: flex; + flex-wrap: wrap; + gap: 0.7rem; +} + +.hero .kicker { + display: inline-block; + margin-bottom: 0.85rem; + border: 1px solid var(--border); + color: var(--gold-bright); + padding: 0.4rem 0.82rem; + border-radius: 999px; + font-size: 0.75rem; + letter-spacing: 0.16em; + text-transform: uppercase; +} + +.hero-media { + min-height: 320px; + border-radius: 20px; overflow: hidden; - box-shadow: var(--shadow); - transition: transform 0.3s, box-shadow 0.3s; + position: relative; +} + +.hero-media img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.hero-media::after { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(to top, rgba(0, 0, 0, 0.42), transparent 40%); +} + +.feature-strip { + margin-top: 1.2rem; + border: 1px solid var(--border); + border-radius: var(--radius-md); + display: grid; + grid-template-columns: repeat(4, 1fr); + overflow: hidden; +} + +.feature-strip .item { + background: rgba(255, 255, 255, 0.015); + padding: 1rem; + border-right: 1px solid rgba(212, 175, 55, 0.1); +} + +.feature-strip .item:last-child { + border-right: none; +} + +.feature-strip .item strong { + display: block; + font-size: 0.95rem; + margin-bottom: 0.15rem; +} + +.feature-strip .item span { + font-size: 0.83rem; + color: var(--text-soft); +} + +.sale-banner, +.promo-banner { + border: 1px solid var(--border); + background: linear-gradient(135deg, rgba(212, 175, 55, 0.1), rgba(5, 5, 5, 0.75)); + border-radius: var(--radius-md); + padding: 1.8rem; + display: grid; + gap: 0.85rem; +} + +.promo-banner { + margin: 4rem 0; +} + +.promo-banner input { + width: min(340px, 100%); + height: 44px; +} + +/* Cards */ +.product-card-link { + display: block; +} + +.product-card, +.category-card, +.order-card, +.contact-form, +.contact-info, +.profile-form, +.checkout-form, +.checkout-summary, +.cart-items, +.cart-summary, +.filters-sidebar { + border: 1px solid var(--border); + background: linear-gradient(150deg, #0f0f0f, #161616 65%, #131313); + border-radius: var(--radius-md); + box-shadow: var(--shadow-soft); +} + +.product-card { + overflow: hidden; + transition: transform 0.28s ease, box-shadow 0.28s ease, border-color 0.28s ease; } .product-card:hover { - transform: translateY(-4px); - box-shadow: var(--shadow-lg); + transform: translateY(-6px); + box-shadow: var(--shadow-gold); + border-color: rgba(212, 175, 55, 0.42); } .product-image-container { position: relative; - overflow: hidden; + background: #0b0b0b; aspect-ratio: 1; - background: var(--light); + overflow: hidden; } .product-image-container img { width: 100%; height: 100%; object-fit: cover; - transition: transform 0.3s; + transition: transform 0.45s ease; } .product-card:hover .product-image-container img { - transform: scale(1.05); + transform: scale(1.06); } -.discount-badge, .featured-badge { +.discount-badge, +.featured-badge { position: absolute; - top: 10px; - right: 10px; - background: var(--primary); - color: white; - padding: 0.5rem 1rem; - border-radius: 4px; - font-weight: bold; - font-size: 0.875rem; + top: 0.75rem; + right: 0.75rem; + padding: 0.32rem 0.55rem; + border-radius: 999px; + font-size: 0.72rem; + font-weight: 700; +} + +.discount-badge { + background: linear-gradient(140deg, #e17070, #be3b3b); + color: #fff; } .featured-badge { right: auto; - left: 10px; - background: #4CAF50; + left: 0.75rem; + background: rgba(212, 175, 55, 0.16); + border: 1px solid var(--border); + color: var(--gold-bright); +} + +.product-wishlist-icon { + position: absolute; + top: 0.75rem; + left: 0.75rem; + width: 34px; + height: 34px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.52); + border: 1px solid rgba(255, 255, 255, 0.1); + display: flex; + align-items: center; + justify-content: center; + font-size: 0.95rem; + color: var(--gold-bright); } .product-info { - padding: 1.5rem; + padding: 1rem; } .product-info h3 { - font-size: 1.1rem; - margin-bottom: 0.5rem; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; + font-size: 1rem; + font-weight: 600; + min-height: 2.8rem; + color: #f4f4f4; } .brand { - color: var(--gray); - font-size: 0.875rem; - margin-bottom: 0.75rem; + color: var(--gold); + margin-top: 0.22rem; + font-size: 0.85rem; } .price { - margin-bottom: 0.75rem; display: flex; - gap: 0.5rem; + gap: 0.45rem; align-items: center; + margin: 0.72rem 0; } .price .original { - color: var(--gray); text-decoration: line-through; - font-size: 0.9rem; + color: var(--text-soft); } .price .discounted, -.price .current { - font-weight: bold; - font-size: 1.2rem; - color: var(--primary); +.price .current, +.price span { + color: var(--gold-bright); + font-weight: 700; + font-size: 1.16rem; } .stock { - font-size: 0.875rem; - margin-bottom: 1rem; + font-size: 0.84rem; } .in-stock { - color: #4CAF50; - font-weight: 600; + color: var(--success); } .out-of-stock { - color: #e74c3c; - font-weight: 600; + color: var(--danger); } -/* Category Card */ .category-card { - display: block; - background: white; - border-radius: var(--border-radius); - overflow: hidden; - box-shadow: var(--shadow); - transition: transform 0.3s; - cursor: pointer; -} - -.category-card:hover { - transform: translateY(-4px); + padding: 0.8rem; } .category-card img { + border-radius: 12px; + height: 210px; width: 100%; - height: 200px; object-fit: cover; } .category-card h3 { - padding: 1rem; - font-size: 1.2rem; + margin-top: 0.9rem; + font-family: 'Montserrat', sans-serif; + font-size: 1rem; } .category-card p { - padding: 0 1rem 1rem; - color: var(--gray); - font-size: 0.875rem; + color: var(--text-muted); + font-size: 0.85rem; } -/* Search Bar */ -.search-bar { - position: relative; - width: 100%; -} - -.search-bar input { - width: 100%; - padding: 0.75rem 1rem; - border: 1px solid var(--gray-light); - border-radius: var(--border-radius); - font-size: 0.95rem; -} - -.search-results { - position: absolute; - top: 100%; - left: 0; - right: 0; - background: white; - border: 1px solid var(--gray-light); - border-top: none; - border-radius: 0 0 var(--border-radius) var(--border-radius); - max-height: 300px; - overflow-y: auto; - z-index: 10; -} - -.search-result-item { - display: block; - padding: 0.75rem 1rem; - border-bottom: 1px solid var(--gray-light); - display: flex; - justify-content: space-between; - cursor: pointer; - transition: background 0.2s; -} - -.search-result-item:hover { - background: var(--light); -} - -/* Filters */ -.filters-sidebar { - background: var(--light); - padding: 1.5rem; - border-radius: var(--border-radius); - height: fit-content; -} - -.filters-sidebar h3 { - margin-bottom: 1.5rem; - font-size: 1.1rem; -} - -.filter-group { - margin-bottom: 1.5rem; -} - -.filter-group label { - display: block; - font-weight: 600; - margin-bottom: 0.5rem; - font-size: 0.9rem; -} - -.filter-group select, -.filter-group input[type="checkbox"] { - width: 100%; - padding: 0.5rem; - border: 1px solid var(--gray-light); - border-radius: 4px; - font-size: 0.9rem; -} - -.filter-group input[type="checkbox"] { - width: auto; - margin-right: 0.5rem; -} - -/* Products Page */ -.products-page { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.products-page h1 { - margin-bottom: 2rem; - font-size: 2rem; +/* Product page */ +.products-page, +.sales-page, +.cart-page, +.checkout-page, +.auth-page, +.profile-page, +.contact-page, +.orders-page, +.wishlist-page, +.about-page, +.messages-page, +.product-detail { + padding-top: 1.2rem; } .products-container { display: grid; - grid-template-columns: 250px 1fr; - gap: 2rem; + grid-template-columns: 270px 1fr; + gap: 1.2rem; + margin-top: 1rem; } -.products-content { - display: flex; - flex-direction: column; +.filters-sidebar { + padding: 1rem; + position: sticky; + top: 96px; + height: fit-content; +} + +.filters-sidebar h3 { + margin-bottom: 0.9rem; + color: var(--gold-bright); +} + +.filter-group { + margin-bottom: 0.95rem; +} + +.price-range-inputs { + display: grid; + grid-template-columns: 1fr auto 1fr; + gap: 0.45rem; + align-items: center; +} + +.form-group label, +.filter-group label { + display: block; + color: var(--text-muted); + margin-bottom: 0.35rem; + font-size: 0.9rem; +} + +input, +select, +textarea, +.filter-group input, +.filter-group select, +.quantity-selector input { + width: 100%; + background: rgba(255, 255, 255, 0.02); + color: #fff; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 11px; + padding: 0.62rem 0.8rem; +} + +input::placeholder, +textarea::placeholder { + color: #737373; +} + +input:focus, +select:focus, +textarea:focus { + outline: none; + border-color: var(--border); + box-shadow: 0 0 0 3px rgba(212, 175, 55, 0.11); } .sort-bar { display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - gap: 1rem; flex-wrap: wrap; + align-items: center; + gap: 0.7rem; + margin-bottom: 1rem; + border: 1px solid var(--border); + background: rgba(255, 255, 255, 0.02); + border-radius: 12px; + padding: 0.72rem; } -.sort-bar select { - padding: 0.5rem 1rem; - border: 1px solid var(--gray-light); - border-radius: var(--border-radius); -} - +.sort-bar label, .product-count { - color: var(--gray); + color: var(--text-muted); font-size: 0.9rem; } -.no-products { - text-align: center; - padding: 3rem 1rem; - color: var(--gray); +.pagination { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 0.45rem; + margin-top: 1.4rem; } -/* Product Detail */ -.product-detail { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; +.pagination .page-btn { + min-width: 38px; + padding: 0.55rem 0.7rem; + border: 1px solid var(--border); + border-radius: 10px; + color: var(--text-muted); } +.page-btn { + min-width: 38px; + padding: 0.55rem 0.7rem; + border: 1px solid var(--border); + border-radius: 10px; + color: var(--text-muted); +} + +.pagination .page-btn.active, +.pagination .page-btn:hover { + color: #121212; + background: var(--gold); +} + +/* Product detail */ .detail-container { display: grid; - grid-template-columns: 1fr 1fr; - gap: 3rem; - margin-top: 2rem; + grid-template-columns: 1.35fr 1fr; + gap: 1.3rem; } -.detail-images { - display: flex; - flex-direction: column; - gap: 1rem; +.detail-images, +.detail-info { + border: 1px solid var(--border); + background: linear-gradient(135deg, #101010, #161616); + border-radius: var(--radius-md); + padding: 1rem; } .main-image-container { position: relative; - width: 100%; - max-width: 500px; - aspect-ratio: 1 / 1; - border-radius: var(--border-radius); + border-radius: 14px; overflow: hidden; - background-color: #f5f5f5; - margin: 0 auto; + min-height: 460px; + border: 1px solid rgba(255, 255, 255, 0.08); } .main-image { width: 100%; height: 100%; - object-fit: contain; - background-color: #f5f5f5; + object-fit: cover; } .nav-arrow { position: absolute; top: 50%; transform: translateY(-50%); - background-color: rgba(255, 255, 255, 0.9); - border: none; + width: 44px; + height: 44px; border-radius: 50%; - width: 40px; - height: 40px; - font-size: 24px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.3s; - z-index: 10; -} - -.nav-arrow:hover { - background-color: rgba(255, 255, 255, 1); - transform: translateY(-50%) scale(1.1); + border: 1px solid var(--border); + background: rgba(0, 0, 0, 0.65); + color: var(--gold); + font-size: 1.25rem; } .nav-arrow.prev { - left: 1rem; + left: 0.8rem; } .nav-arrow.next { - right: 1rem; + right: 0.8rem; } .thumbnail-gallery { - display: flex; - gap: 0.5rem; - overflow-x: auto; - padding: 0.5rem 0; + margin-top: 0.8rem; + display: grid; + gap: 0.55rem; + grid-template-columns: repeat(auto-fit, minmax(78px, 1fr)); } .thumbnail { - width: 80px; - height: 80px; + width: 100%; + aspect-ratio: 1; object-fit: cover; - border-radius: 8px; + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.09); cursor: pointer; - border: 2px solid transparent; - transition: all 0.3s; - flex-shrink: 0; -} - -.thumbnail:hover { - border-color: var(--primary-color); - opacity: 0.8; } .thumbnail.active { - border-color: var(--primary-color); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-color: var(--gold); + box-shadow: 0 0 0 2px rgba(212, 175, 55, 0.26); } .detail-info h1 { - font-size: 2rem; - margin-bottom: 0.5rem; -} - -.detail-info .brand { - font-size: 1rem; - margin-bottom: 1rem; + font-size: clamp(1.6rem, 1.35rem + 1.6vw, 2.4rem); + line-height: 1.14; } .rating { - margin-bottom: 1.5rem; - font-size: 1rem; + color: var(--gold-bright); + margin: 0.55rem 0; } -.detail-info .description { - color: var(--gray); - line-height: 1.8; - margin-bottom: 1.5rem; +.model-code { + color: var(--text-soft); + font-size: 0.9rem; + margin-bottom: 1.1rem; +} + +.description { + color: var(--text-muted); + margin-bottom: 1.1rem; } .option-group { - margin-bottom: 1.5rem; + margin-bottom: 1rem; } -.option-group label { +.option-group > label { display: block; - font-weight: 600; - margin-bottom: 0.75rem; + color: var(--text-muted); + margin-bottom: 0.45rem; } -.color-options, .size-options { - display: flex; - gap: 0.75rem; - flex-wrap: wrap; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(56px, 1fr)); + gap: 0.5rem; } -.color-btn, .size-btn { - padding: 0.75rem 1rem; - border: 2px solid var(--gray-light); - border-radius: var(--border-radius); - background: white; - cursor: pointer; - transition: all 0.3s; + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 10px; + color: #ececec; + min-height: 42px; } -.color-btn:hover, +.size-btn.active, .size-btn:hover { - border-color: var(--primary); -} - -.color-btn.active, -.size-btn.active { - border-color: var(--primary); - background: var(--primary); - color: white; + border-color: var(--gold); + background: rgba(212, 175, 55, 0.11); } .quantity-selector { - display: flex; - align-items: center; - gap: 0.5rem; - border: 1px solid var(--gray-light); - border-radius: var(--border-radius); - width: fit-content; + width: 150px; + display: grid; + grid-template-columns: 42px 1fr 42px; + border: 1px solid var(--border); + border-radius: 10px; + overflow: hidden; } .quantity-selector button { - width: 40px; - height: 40px; - background: transparent; - cursor: pointer; - font-size: 1.2rem; + color: var(--gold); + background: rgba(212, 175, 55, 0.04); } .quantity-selector input { - width: 60px; border: none; + border-left: 1px solid var(--border); + border-right: 1px solid var(--border); text-align: center; - font-weight: bold; -} - -.stock-info { - margin-bottom: 1.5rem; - padding: 1rem; - background: var(--light); - border-radius: var(--border-radius); + border-radius: 0; } .action-buttons { - display: flex; - gap: 1rem; - margin-bottom: 2rem; -} - -.action-buttons .btn { - flex: 1; -} - -.action-buttons .btn-icon { - flex: 0; - width: auto; + margin: 1.35rem 0; + display: grid; + grid-template-columns: 1fr auto; + gap: 0.65rem; } .product-details { - padding-top: 2rem; - border-top: 1px solid var(--gray-light); -} - -.product-details h3 { - margin-bottom: 1rem; + border-top: 1px solid rgba(255, 255, 255, 0.08); + padding-top: 1rem; } .product-details ul { list-style: none; -} - -.product-details li { - padding: 0.5rem 0; - color: var(--gray); -} - -/* Cart Page */ -.cart-page { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.cart-page h1 { - margin-bottom: 2rem; -} - -.empty-cart { - text-align: center; - padding: 3rem; - background: var(--light); - border-radius: var(--border-radius); -} - -.empty-cart p { - margin-bottom: 1.5rem; - color: var(--gray); -} - -.cart-container { display: grid; - grid-template-columns: 1fr 350px; - gap: 2rem; + gap: 0.33rem; + color: var(--text-muted); } -.cart-table { - width: 100%; - border-collapse: collapse; +/* Cart */ +.cart-container, +.checkout-container, +.profile-container, +.contact-container { + display: grid; + grid-template-columns: 1.2fr 0.8fr; + gap: 1rem; + margin-top: 1rem; } -.cart-table th { - background: var(--light); +.cart-items, +.cart-summary { padding: 1rem; - text-align: left; - font-weight: 600; - border-bottom: 2px solid var(--gray-light); } -.cart-table td { - padding: 1rem; - border-bottom: 1px solid var(--gray-light); +.cart-item { + display: grid; + grid-template-columns: 88px 1fr auto; + gap: 0.8rem; + align-items: center; + padding: 0.9rem 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.07); +} + +.cart-item:last-child { + border-bottom: none; } .cart-item-product { display: flex; - gap: 1rem; + gap: 0.72rem; align-items: center; } .cart-item-product img { - width: 80px; - height: 80px; + width: 82px; + height: 82px; + border-radius: 10px; object-fit: cover; - border-radius: 4px; + border: 1px solid rgba(255, 255, 255, 0.09); +} + +.cart-item > img { + width: 82px; + height: 82px; + border-radius: 10px; + object-fit: cover; + border: 1px solid rgba(255, 255, 255, 0.09); } .product-name { @@ -820,1081 +1038,635 @@ button { } .quantity-control { - display: flex; - align-items: center; - gap: 0.5rem; - border: 1px solid var(--gray-light); - border-radius: 4px; - width: fit-content; + display: inline-flex; + border: 1px solid var(--border); + border-radius: 10px; + overflow: hidden; } .quantity-control button { width: 30px; - height: 30px; - background: transparent; - cursor: pointer; + color: var(--gold); } -.cart-summary { - background: var(--light); - padding: 1.5rem; - border-radius: var(--border-radius); - height: fit-content; - position: sticky; - top: 100px; +.quantity-control span { + width: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + color: #efefef; } -.cart-summary h3 { - margin-bottom: 1.5rem; +.summary-rows, +.summary-items { + display: grid; + gap: 0.55rem; } -.summary-rows { - margin-bottom: 1.5rem; -} - -.summary-row { +.summary-row, +.summary-item { display: flex; justify-content: space-between; - padding: 0.75rem 0; - border-bottom: 1px solid var(--gray-light); + color: var(--text-muted); } -.summary-row.total { - font-weight: bold; - font-size: 1.1rem; - border-top: 2px solid var(--gray-light); - border-bottom: none; - padding: 1rem 0; -} - -/* Checkout Page */ -.checkout-page { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.checkout-page h1 { - margin-bottom: 2rem; -} - -.checkout-container { - display: grid; - grid-template-columns: 1fr 350px; - gap: 2rem; +.summary-row.total, +.summary-total { + margin-top: 0.8rem; + padding-top: 0.8rem; + border-top: 1px solid rgba(255, 255, 255, 0.08); + color: #fff; + font-weight: 700; } +/* Checkout */ .checkout-form, .checkout-summary { - background: var(--light); - padding: 2rem; - border-radius: var(--border-radius); + padding: 1rem; } .form-section { - margin-bottom: 2rem; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + padding: 0.9rem; + margin-bottom: 0.9rem; } .form-section h2 { - font-size: 1.3rem; - margin-bottom: 1rem; -} - -.form-group { - margin-bottom: 1rem; -} - -.form-group label { - display: block; - font-weight: 600; - margin-bottom: 0.5rem; -} - -.form-group input, -.form-group select, -.form-group textarea { - width: 100%; - padding: 0.75rem; - border: 1px solid var(--gray-light); - border-radius: var(--border-radius); - font-size: 0.95rem; - font-family: inherit; - transition: border-color 0.3s; -} - -.form-group input:focus, -.form-group select:focus, -.form-group textarea:focus { - outline: none; - border-color: var(--primary); -} - -.form-group input.error, -.form-group select.error, -.form-group textarea.error { - border-color: #f44336; -} - -.required { - color: #f44336; - margin-left: 2px; -} - -.error-message { - display: block; - color: #f44336; - font-size: 0.85rem; - margin-top: 0.25rem; -} - -.payment-info { - font-size: 1rem; - margin-bottom: 0.5rem; - color: var(--secondary); -} - -.text-muted { - color: var(--gray); - font-size: 0.9rem; + font-size: 1.02rem; + color: var(--gold-bright); + margin-bottom: 0.6rem; } .form-row { display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 1rem; + grid-template-columns: repeat(2, 1fr); + gap: 0.75rem; } -.checkout-summary { - height: fit-content; - position: sticky; - top: 100px; +.required { + color: #e69191; } -.summary-items { - margin-bottom: 1.5rem; -} - -.summary-item { - display: flex; - justify-content: space-between; - padding: 0.75rem 0; - border-bottom: 1px solid var(--gray-light); - font-size: 0.9rem; -} - -.summary-total { - padding-top: 1rem; - font-size: 1.1rem; - color: var(--primary); -} - -/* Auth Pages */ -.auth-page { - display: flex; - justify-content: center; - align-items: center; - min-height: calc(100vh - 200px); - padding: 2rem; -} - -.auth-container { - background: white; - padding: 3rem; - border-radius: var(--border-radius); - box-shadow: var(--shadow-lg); - width: 100%; - max-width: 400px; -} - -.auth-container h1 { - margin-bottom: 2rem; - text-align: center; -} - -.auth-container form { - margin-bottom: 1.5rem; -} - -.auth-container p { - text-align: center; - color: var(--gray); - margin-bottom: 1rem; -} - -.auth-container a { - color: var(--primary); - font-weight: 600; -} - -.forgot-password-link { - text-align: right; - margin-bottom: 1rem; - margin-top: -0.5rem; -} - -.link-button { - background: none; - border: none; - color: var(--primary); - font-size: 0.9rem; - cursor: pointer; - padding: 0; - text-decoration: underline; - transition: color 0.3s; -} - -.link-button:hover { - color: var(--primary-dark); -} - -.auth-switch { - margin-top: 1.5rem !important; -} - -.modal-description { - color: var(--gray); - margin-bottom: 1.5rem; - text-align: left !important; -} - -.admin-demo { - color: #ff6b6b !important; - font-weight: bold !important; +.error, +.error-message { + color: #ff8d8d; } .error-message { - background: #f8d7da; - color: #721c24; + font-size: 0.8rem; + margin-top: 0.2rem; +} + +.payment-info, +.text-muted { + color: var(--text-muted); +} + +/* Auth */ +.auth-page { + display: flex; + justify-content: center; + align-items: stretch; +} + +.auth-container { + width: min(1040px, 100%); + min-height: 620px; + display: grid; + grid-template-columns: 1fr 1fr; + margin: 1.4rem auto; + border: 1px solid var(--border); + border-radius: var(--radius-lg); + overflow: hidden; + box-shadow: var(--shadow-soft); + background: #101010; +} + +.auth-visual { + position: relative; + background: #070707; +} + +.auth-visual img { + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0.7; +} + +.auth-visual-copy { + position: absolute; + inset: auto 1.2rem 1.2rem; padding: 1rem; - border-radius: var(--border-radius); + border-radius: 12px; + border: 1px solid rgba(212, 175, 55, 0.3); + background: rgba(0, 0, 0, 0.6); +} + +.auth-panel { + padding: clamp(1rem, 3vw, 2.2rem); + display: flex; + flex-direction: column; + justify-content: center; +} + +.auth-panel h1 { margin-bottom: 1rem; - text-align: center; } -.demo-account { - background: #e3f2fd; +.forgot-password-link, +.auth-switch { + margin-top: 0.65rem; +} + +.link-button { + color: var(--gold-bright); + font-size: 0.88rem; +} + +.auth-meta { + margin: 0.7rem 0 1rem; + display: flex; + align-items: center; + justify-content: space-between; + color: var(--text-muted); + font-size: 0.88rem; +} + +.auth-meta label { + display: inline-flex; + align-items: center; + gap: 0.45rem; +} + +.auth-switch a { + color: var(--gold-bright); +} + +/* Modal + toast */ +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.62); + display: grid; + place-items: center; + z-index: 80; padding: 1rem; - border-radius: var(--border-radius); - margin-top: 1.5rem; - font-size: 0.875rem; } -.demo-account p { - margin: 0.25rem 0; +.modal-content { + width: min(530px, 100%); + border: 1px solid var(--border); + border-radius: 14px; + background: #111; +} + +.modal-header { + padding: 0.9rem 1rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal-body { + padding: 1rem; +} + +.modal-close { + color: #d7d7d7; + font-size: 1.25rem; +} + +.cart-modal { + text-align: center; + padding: 1.4rem; +} + +.cart-modal-icon { + width: 54px; + height: 54px; + margin: 0 auto 0.8rem; + border-radius: 50%; + border: 1px solid var(--border); + color: var(--gold); + display: grid; + place-items: center; +} + +.cart-modal-actions { + margin-top: 1rem; + display: flex; + gap: 0.6rem; + justify-content: center; +} + +.toast { + position: fixed; + right: 1rem; + bottom: 1rem; + width: min(360px, calc(100vw - 2rem)); + display: flex; + align-items: center; + gap: 0.7rem; + padding: 0.85rem; + border-radius: 12px; + border: 1px solid var(--border); + background: #111; + box-shadow: var(--shadow-soft); + z-index: 95; +} + +.toast-success .toast-icon { + color: var(--success); +} + +.toast-error .toast-icon { + color: #ff8d8d; +} + +.toast-info .toast-icon { + color: #8fc1ff; +} + +.toast-close { + margin-left: auto; + color: #bbb; +} + +/* Profile */ +.profile-shell { + display: grid; + grid-template-columns: 250px 1fr; + gap: 1rem; + margin-top: 1rem; +} + +.profile-nav { + border: 1px solid var(--border); + border-radius: var(--radius-md); + background: var(--surface-glass); + padding: 0.7rem; + height: fit-content; +} + +.profile-nav button, +.profile-nav a { + width: 100%; text-align: left; + color: var(--text-muted); + padding: 0.62rem 0.75rem; + border-radius: 10px; + border: 1px solid transparent; + display: block; } -/* Profile Page */ -.profile-page, -.orders-page, -.wishlist-page { - max-width: 1000px; - margin: 0 auto; - padding: 2rem; +.profile-nav .active, +.profile-nav button:hover, +.profile-nav a:hover { + color: var(--gold-bright); + border-color: var(--border); + background: rgba(212, 175, 55, 0.09); } -.profile-page h1, -.orders-page h1, -.wishlist-page h1 { - margin-bottom: 2rem; +.profile-metrics { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; + margin-bottom: 0.9rem; } -.profile-container { - background: var(--light); - padding: 2rem; - border-radius: var(--border-radius); +.profile-metric { + border: 1px solid var(--border); + background: rgba(212, 175, 55, 0.05); + border-radius: 12px; + padding: 0.75rem; +} + +.profile-metric span { + color: var(--text-soft); + font-size: 0.8rem; +} + +.profile-metric strong { + font-size: 1.5rem; + color: var(--gold-bright); + font-family: 'Montserrat', sans-serif; +} + +.admin-pill { + margin-left: 0.7rem; + border: 1px solid var(--border); + color: var(--gold-bright); + border-radius: 999px; + padding: 0.2rem 0.6rem; + font-size: 0.75rem; +} + +.profile-forms { + display: grid; + gap: 0.95rem; +} + +.profile-form { + padding: 1rem; } .profile-form h2 { - font-size: 1.3rem; - margin: 1.5rem 0 1rem; + margin-bottom: 0.75rem; + color: var(--gold-bright); } -.profile-form h2:first-child { - margin-top: 0; -} - -/* Orders Page */ -.orders-container { - display: flex; - flex-direction: column; - gap: 2rem; +/* Orders & wishlist */ +.orders-container, +.wishlist-container { + margin-top: 1rem; + display: grid; + gap: 0.95rem; } .order-card { - background: white; - border: 1px solid var(--gray-light); - border-radius: var(--border-radius); - padding: 2rem; - box-shadow: var(--shadow); + padding: 1rem; } .order-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 1.5rem; - border-bottom: 1px solid var(--gray-light); - padding-bottom: 1rem; + gap: 0.75rem; } -.order-header h3 { - font-size: 1.2rem; +.status, +.status-badge { + border: 1px solid var(--border); + border-radius: 999px; + padding: 0.3rem 0.6rem; + font-size: 0.72rem; + color: var(--gold-bright); } -.status { - padding: 0.5rem 1rem; - border-radius: 20px; - font-size: 0.875rem; - font-weight: 600; - text-transform: uppercase; -} - -.status.pending { - background: #fff3cd; - color: #856404; -} - -.status.paid { - background: #d4edda; - color: #155724; -} - -.status.shipped { - background: #d1ecf1; - color: #0c5460; -} - -.status.delivered { - background: #d4edda; - color: #155724; -} - -.order-details { - margin-bottom: 1.5rem; -} - -.detail-row { - display: flex; - justify-content: space-between; - padding: 0.5rem 0; - color: var(--gray); -} - -.order-items { - margin-bottom: 1.5rem; - padding-bottom: 1.5rem; - border-bottom: 1px solid var(--gray-light); +.order-details, +.order-items, +.shipping-info { + margin-top: 0.75rem; } .order-item { - display: flex; - gap: 1rem; + display: grid; + grid-template-columns: 60px 1fr auto; + gap: 0.6rem; align-items: center; - margin-bottom: 0.75rem; + padding: 0.45rem 0; } .order-item img { width: 60px; height: 60px; + border-radius: 9px; object-fit: cover; - border-radius: 4px; } -.shipping-info { - background: var(--light); - padding: 1rem; - border-radius: var(--border-radius); -} - -.shipping-info h4 { - margin-bottom: 0.5rem; -} - -.shipping-info p { - font-size: 0.9rem; - color: var(--gray); - margin-bottom: 0.25rem; -} - -/* Wishlist Page */ .wishlist-item { - position: relative; + display: grid; + gap: 0.7rem; } -.wishlist-item .btn { - margin-top: 0.5rem; -} - -/* About Page */ +/* About + contact */ .about-page { - max-width: 1000px; - margin: 0 auto; - padding: 2rem; -} - -.about-page h1 { - margin-bottom: 2rem; - font-size: 2.5rem; + display: grid; + gap: 0.95rem; } .about-section { - margin-bottom: 3rem; + border: 1px solid var(--border); + border-radius: var(--radius-md); + background: var(--surface-glass); + padding: 1rem; } .about-section h2 { - font-size: 1.8rem; - margin-bottom: 1rem; - color: var(--primary); + margin-bottom: 0.45rem; + color: var(--gold-bright); } -.about-section p { - font-size: 1rem; - line-height: 1.8; - color: var(--gray); +.about-section p, +.values-list li { + color: var(--text-muted); } .values-list { list-style: none; - margin-top: 1rem; -} - -.values-list li { - padding: 1rem; - margin-bottom: 0.75rem; - background: var(--light); - border-left: 4px solid var(--primary); - border-radius: 4px; + display: grid; + gap: 0.45rem; } .why-us-grid { + margin-top: 0.75rem; display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1.5rem; - margin-top: 1.5rem; + gap: 0.75rem; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } .why-us-card { - background: var(--light); - padding: 1.5rem; - border-radius: var(--border-radius); - text-align: center; - transition: transform 0.3s; -} - -.why-us-card:hover { - transform: translateY(-4px); -} - -.why-us-card h3 { - font-size: 1.2rem; - margin-bottom: 0.75rem; -} - -/* Contact Page */ -.contact-page { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.contact-page h1 { - margin-bottom: 2rem; + border: 1px solid var(--border); + border-radius: 12px; + padding: 0.8rem; + background: rgba(255, 255, 255, 0.02); } .contact-container { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 3rem; - margin-top: 2rem; -} - -.contact-info h2 { - font-size: 1.5rem; - margin-bottom: 2rem; -} - -.info-item { - margin-bottom: 2rem; -} - -.info-item h3 { - font-size: 1.1rem; - margin-bottom: 0.75rem; - color: var(--primary); -} - -.info-item p { - color: var(--gray); - line-height: 1.8; -} - -.social-links { - display: flex; - gap: 1rem; -} - -.social-links a { - display: inline-block; - width: 40px; - height: 40px; - background: var(--primary); - color: white; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.3s; -} - -.social-links a:hover { - background: var(--primary-dark); -} - -.social-icons { - display: flex; - flex-direction: column; - gap: 1rem; margin-top: 1rem; } -.social-icon { - display: flex; - align-items: center; - gap: 1rem; - padding: 1rem; - border-radius: var(--border-radius); - background: var(--light); - color: var(--secondary); - transition: all 0.3s; - text-decoration: none; -} - -.social-icon:hover { - transform: translateX(8px); - box-shadow: var(--shadow); -} - -.social-icon svg { - flex-shrink: 0; -} - -.social-icon.instagram:hover { - background: linear-gradient(45deg, #f09433 0%, #e6683c 25%, #dc2743 50%, #cc2366 75%, #bc1888 100%); - color: white; -} - -.social-icon.whatsapp:hover { - background: #25D366; - color: white; -} - -.social-icon span { - font-weight: 500; - font-size: 1rem; -} - +.contact-info, .contact-form { - background: var(--light); - padding: 2rem; - border-radius: var(--border-radius); + padding: 1rem; } -.contact-form h2 { - font-size: 1.5rem; - margin-bottom: 1.5rem; +.info-item { + margin-bottom: 0.9rem; +} + +.info-item h3 { + color: var(--gold-bright); + margin-bottom: 0.2rem; +} + +.social-links, +.social-icons { + display: flex; + gap: 0.55rem; + flex-wrap: wrap; +} + +.social-icon, +.social-links a { + border: 1px solid var(--border); + padding: 0.5rem 0.7rem; + border-radius: 10px; + color: var(--gold); + display: inline-flex; + align-items: center; + gap: 0.45rem; } .success-message { - background: #d4edda; - color: #155724; - padding: 1rem; - border-radius: var(--border-radius); - margin-bottom: 1rem; - text-align: center; - font-weight: 600; -} - -/* Sales Page */ -.sales-page { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; -} - -.sales-header { - background: linear-gradient(135deg, var(--primary) 0%, #ff8787 100%); - color: white; - padding: 3rem 2rem; - border-radius: var(--border-radius); - text-align: center; - margin-bottom: 2rem; -} - -.sales-header h1 { - font-size: 2.5rem; - margin-bottom: 0.5rem; -} - -.sales-header p { - font-size: 1.1rem; -} - -/* Sale Banner */ -.sale-banner { - background: linear-gradient(135deg, var(--primary) 0%, #ff8787 100%); - color: white; - padding: 3rem 2rem; - text-align: center; - border-radius: var(--border-radius); -} - -.sale-banner h2 { - color: white; -} - -.sale-banner p { - font-size: 1.1rem; - margin-bottom: 1.5rem; -} - -/* Promo Banner */ -.promo-banner { - background: linear-gradient(135deg, var(--secondary) 0%, #424242 100%); - color: white; - padding: 3rem 2rem; - text-align: center; - border-radius: var(--border-radius); - display: flex; - flex-direction: column; - align-items: center; - gap: 1rem; -} - -.promo-banner h3 { - font-size: 1.5rem; -} - -.promo-banner input { - max-width: 400px; - width: 100%; - padding: 0.75rem 1rem; - border: none; - border-radius: var(--border-radius); -} - -.promo-banner .btn { - max-width: 400px; -} - -/* Modal */ -.modal-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); - display: flex; - justify-content: center; - align-items: center; - z-index: 1000; - animation: fadeIn 0.2s ease-out; -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -.modal-content { - background: white; - border-radius: var(--border-radius); - padding: 2rem; - max-width: 500px; - width: 90%; - max-height: 90vh; - overflow-y: auto; - box-shadow: var(--shadow-lg); - animation: slideUp 0.3s ease-out; -} - -@keyframes slideUp { - from { - transform: translateY(20px); - opacity: 0; - } - to { - transform: translateY(0); - opacity: 1; - } -} - -.modal-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1.5rem; - padding-bottom: 1rem; - border-bottom: 1px solid var(--gray-light); -} - -.modal-header h2 { - margin: 0; - font-size: 1.5rem; -} - -.modal-close { - background: none; - border: none; - font-size: 2rem; - color: var(--gray); - cursor: pointer; - padding: 0; - width: 30px; - height: 30px; - display: flex; - align-items: center; - justify-content: center; - transition: color 0.3s; -} - -.modal-close:hover { - color: var(--secondary); -} - -.modal-body { - margin-bottom: 0; -} - -/* Cart Modal Specific */ -.cart-modal { - text-align: center; - max-width: 400px; -} - -.cart-modal-icon { - width: 60px; - height: 60px; - background: #4CAF50; - color: white; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-size: 2rem; - margin: 0 auto 1rem; -} - -.cart-modal h2 { - margin-bottom: 0.5rem; - color: var(--secondary); -} - -.cart-modal-message { - color: var(--gray); - margin-bottom: 1.5rem; -} - -.cart-modal-actions { - display: flex; - gap: 1rem; - justify-content: center; -} - -.cart-modal-actions .btn { - flex: 1; - max-width: 200px; -} - -/* Toast Notifications */ -.toast { - position: fixed; - top: 20px; - right: 20px; - background: white; - padding: 1rem 1.5rem; - border-radius: var(--border-radius); - box-shadow: var(--shadow-lg); - display: flex; - align-items: center; - gap: 1rem; - z-index: 1001; - min-width: 300px; - animation: slideInRight 0.3s ease-out; -} - -@keyframes slideInRight { - from { - transform: translateX(400px); - opacity: 0; - } - to { - transform: translateX(0); - opacity: 1; - } -} - -.toast-success { - border-left: 4px solid #4CAF50; -} - -.toast-error { - border-left: 4px solid #f44336; -} - -.toast-info { - border-left: 4px solid #2196F3; -} - -.toast-icon { - width: 24px; - height: 24px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-weight: bold; - flex-shrink: 0; -} - -.toast-success .toast-icon { - background: #4CAF50; - color: white; -} - -.toast-error .toast-icon { - background: #f44336; - color: white; -} - -.toast-info .toast-icon { - background: #2196F3; - color: white; -} - -.toast-message { - flex: 1; - color: var(--secondary); -} - -.toast-close { - background: none; - border: none; - font-size: 1.5rem; - color: var(--gray); - cursor: pointer; - padding: 0; - width: 24px; - height: 24px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; -} - -.toast-close:hover { - color: var(--secondary); + border: 1px solid rgba(103, 197, 131, 0.4); + background: rgba(103, 197, 131, 0.11); + color: #87e0a1; + border-radius: 10px; + padding: 0.65rem; + margin-bottom: 0.8rem; } /* Footer */ .footer { - background: var(--secondary); - color: white; margin-top: auto; - padding: 3rem 0 1rem; + border-top: 1px solid var(--border); + background: #080808; } .footer-container { - max-width: 1200px; + width: min(1320px, 94vw); margin: 0 auto; - padding: 0 2rem; + padding: 2.2rem 0 1.4rem; display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 2rem; - margin-bottom: 2rem; -} - -.footer-section h3, -.footer-section h4 { - margin-bottom: 1rem; - font-size: 1rem; + gap: 1rem; + grid-template-columns: 1.5fr 1fr 1fr 1fr; } .footer-brand { display: flex; align-items: center; - gap: 0.5rem; - margin-bottom: 1rem; + gap: 0.62rem; + margin-bottom: 0.65rem; } .footer-logo { - font-size: 1.5rem; + width: 40px; + height: 40px; + display: grid; + place-items: center; + border: 1px solid var(--border); + border-radius: 10px; + color: var(--gold); } -.footer-brand h3 { - margin: 0; - font-size: 1.2rem; -} - -.footer-section p { - color: rgba(255, 255, 255, 0.7); - font-size: 0.9rem; - line-height: 1.8; -} - -.footer-section a { - display: block; - color: rgba(255, 255, 255, 0.7); +.footer-section h4 { + color: var(--gold-bright); margin-bottom: 0.5rem; - transition: color 0.3s; } -.footer-section a:hover { - color: white; +.footer-section ul { + list-style: none; + display: grid; + gap: 0.35rem; } -.social-links { - display: flex; - gap: 1rem; - margin-top: 1rem; +.footer-section li, +.footer-section p { + color: var(--text-muted); } .footer-bottom { - text-align: center; - padding-top: 2rem; - border-top: 1px solid rgba(255, 255, 255, 0.1); - color: rgba(255, 255, 255, 0.6); - font-size: 0.9rem; + border-top: 1px solid rgba(212, 175, 55, 0.12); + color: var(--text-soft); + padding: 0.8rem 0; + width: min(1320px, 94vw); + margin: 0 auto; } -/* Loading & Empty States */ -.loading, -.empty-state { - text-align: center; - padding: 3rem 1rem; - color: var(--gray); - font-size: 1.1rem; +/* Admin and models fallback theme */ +.admin-page, +.models-page, +.admin-content, +.admin-tabs, +.admin-form, +.admin-grid, +.admin-table { + color: var(--text-main); } -.empty-state { - background: var(--light); - border-radius: var(--border-radius); - margin: 2rem auto; - max-width: 500px; -} - -.empty-state .btn { - margin-top: 1.5rem; -} - -.text-muted { - color: var(--gray); - font-size: 0.9rem; -} - -/* Responsive Design */ -@media (max-width: 768px) { +/* Responsive */ +@media (max-width: 1180px) { .navbar-container { - flex-wrap: wrap; - gap: 1rem; - } - - .navbar-center { - order: 3; - flex-basis: 100%; - max-width: 100%; + grid-template-columns: auto 1fr auto; } .navbar-menu { - gap: 1rem; - font-size: 0.9rem; + order: 4; + grid-column: 1 / -1; + justify-content: center; + flex-wrap: wrap; + padding-bottom: 0.7rem; } - .grid { - grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); - gap: 1rem; - } - - .hero-content h1 { - font-size: 2rem; - } - - .detail-container { - grid-template-columns: 1fr; - } - - .products-container { + .products-container, + .detail-container, + .cart-container, + .checkout-container, + .profile-shell, + .contact-container, + .auth-container, + .footer-container { grid-template-columns: 1fr; } .filters-sidebar { - display: none; - } - - .cart-container, - .checkout-container, - .contact-container { - grid-template-columns: 1fr; - } - - .cart-summary, - .checkout-summary { position: static; } - .cart-table { - font-size: 0.85rem; + .feature-strip { + grid-template-columns: repeat(2, 1fr); } - .cart-table th, - .cart-table td { - padding: 0.5rem; - } - - .sort-bar { - flex-direction: column; - align-items: flex-start; - } - - .footer-container { + .hero { grid-template-columns: 1fr; } + + .main-image-container { + min-height: 320px; + } } -@media (max-width: 480px) { - .navbar-logo { - font-size: 1.2rem; +@media (max-width: 720px) { + .main-content { + width: min(1320px, 96vw); + padding-top: 1rem; + } + + .navbar-container { + min-height: 76px; + gap: 0.6rem; + } + + .navbar-center { + grid-column: 1 / -1; + order: 3; + max-width: 100%; } .navbar-icons { - gap: 0.5rem; + justify-content: flex-end; } - .btn { - padding: 0.6rem 1rem; - font-size: 0.9rem; + .feature-strip, + .profile-metrics, + .form-row { + grid-template-columns: 1fr; } - .grid { - grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); - gap: 0.75rem; + .action-buttons { + grid-template-columns: 1fr; } - .hero-content h1 { - font-size: 1.5rem; + .cart-item { + grid-template-columns: 1fr; + text-align: left; } - .section { - padding: 0 1rem; - } - - .auth-container { - padding: 1.5rem; - } - - .contact-form, - .profile-container { - padding: 1rem; + .cart-modal-actions { + flex-direction: column; } }