From 03bf5cace71b0e5daab5824adc0e1e42110379ea Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 22 Feb 2026 21:23:39 +0000 Subject: [PATCH] 1.1 --- config/__pycache__/__init__.cpython-311.pyc | Bin 159 -> 159 bytes config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5549 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 1557 bytes config/__pycache__/wsgi.cpython-311.pyc | Bin 679 -> 679 bytes config/settings.py | 2 +- core/__pycache__/__init__.cpython-311.pyc | Bin 157 -> 157 bytes core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 1462 bytes core/__pycache__/apps.cpython-311.pyc | Bin 524 -> 524 bytes .../context_processors.cpython-311.pyc | Bin 763 -> 763 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 3382 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 501 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1466 bytes core/admin.py | 17 +- core/management/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 168 bytes core/management/commands/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 177 bytes .../__pycache__/sync_woo.cpython-311.pyc | Bin 0 -> 4355 bytes core/management/commands/sync_woo.py | 93 ++++++++ core/migrations/0001_initial.py | 49 ++++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3070 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 168 -> 168 bytes core/models.py | 38 +++- core/templates/base.html | 58 +++-- core/templates/core/index.html | 214 ++++++------------ core/templates/core/product_detail.html | 95 ++++++++ core/urls.py | 8 +- core/views.py | 47 ++-- static/css/custom.css | 103 ++++++++- 29 files changed, 531 insertions(+), 193 deletions(-) create mode 100644 core/management/__init__.py create mode 100644 core/management/__pycache__/__init__.cpython-311.pyc create mode 100644 core/management/commands/__init__.py create mode 100644 core/management/commands/__pycache__/__init__.cpython-311.pyc create mode 100644 core/management/commands/__pycache__/sync_woo.cpython-311.pyc create mode 100644 core/management/commands/sync_woo.py create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/templates/core/product_detail.html diff --git a/config/__pycache__/__init__.cpython-311.pyc b/config/__pycache__/__init__.cpython-311.pyc index 423a6362b2322713e75da67a35e209e76169dbae..d6476d69c2653eaee1531203b6d75d5fcef4c723 100644 GIT binary patch delta 19 ZcmbQwIG>SwIWI340}wc7&Ys9U1pq2%1dIRx delta 19 ZcmbQwIG>SwIWI340}xbw%b&y;hrdIWI340}wE0&CYb($Q!`Ra*L@ndvgl!H)c~4pm>ofkhsO1nO9O|2I5+P r2ul!Q1tP3Lge{P`#adjDlUY*aIJsZYkTHGpLBVn+M$yfdBIS$#Ez}u_ delta 107 zcmZ3hy+NCIIWI340}xbw%g=P#$Q!`RUd5W4r(0UQIg$4pv#Bvqs>lRL++xnmD=9Js uam_)51&FW&5mq3=21wjuEiTB(EGcrB+#_hnn6`PJU^x?`#AY**az+5dg&O_< diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 0b85e94ece283a83ff1af1d71f1b265c943eb37a..8d9744a27ca755e6043752755ad86908ac04a12b 100644 GIT binary patch delta 20 acmbQrGnI#XIWI340}wc7&fdt)#RdQ_bp$E^ delta 20 acmbQrGnI#XIWI340}xbw%iqY&#RdQ}b_B!# diff --git a/config/__pycache__/wsgi.cpython-311.pyc b/config/__pycache__/wsgi.cpython-311.pyc index 9c49e09df194d2dbcad4868349c9177db4b15571..27aaa70027feff2f8733debdaac9be1c82e1a420 100644 GIT binary patch delta 20 acmZ3^x}24JIWI340}wc7&fds9hY0{NMFh?O delta 20 acmZ3^x}24JIWI340}xbw%iqX7hY0{RMg?d9 diff --git a/config/settings.py b/config/settings.py index 291d043..d1b022f 100644 --- a/config/settings.py +++ b/config/settings.py @@ -133,7 +133,7 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/5.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'uk' TIME_ZONE = 'UTC' diff --git a/core/__pycache__/__init__.cpython-311.pyc b/core/__pycache__/__init__.cpython-311.pyc index 74b111269bd81aac528770a53e2f849291524d56..f6bacc09ba6b8ebcd6cde236bee6c8217997c5a2 100644 GIT binary patch delta 19 ZcmbQsIG2%oIWI340}wc7&Ys9U2>>b`1cm?r delta 19 ZcmbQsIG2%oIWI340}xbw%b&>mG1t0(b diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..5f9034e498b60884dd089ea9a8e6e25d93a7916b 100644 GIT binary patch literal 1462 zcma)6J5Ss|5Z?9UUfdmsmw-qF2@%CoxU14dktm`(L6Pz(+*roDfWc>9*0z9DF8Bd- z6zPc~{tQT0oVG$rg_Pn5R8*O<&xbfDvTKiacV<7&_wB5I)@l_3&2Rm1-zbFq#!21^ z{lV2A7#tBs81+btnv@czFx699s;Ra#Q=>#7uL;u*2-7*;)^mVkm5>v7vt||)0^VXi z=jt&9KfGB>F$#cDgs4)!dKcpumQQjQG0Q`U+5?CsKrH_^Vue*c5o6>6zhO|R+pOjK z7nq}=$l^y4u-J)Y`Kv8lJ8}cx86*RPoXXWSOpXXACS}A_xN2&QnmSVeT9u=N&2N3r z^|=7u$(m7+CCl>d7Pl-}v8)z+$-{BgvcAQ(mw5!9iPXW#J*o4(NZ7x~6|9k)<>pq< z;>~zH_M^DT_qY>BfoSdqVkd0d4sSYv;LVgzqrERs;M8a^2xq_~gWj!9C9k^GTJj3J z7|lZ;Cc6OcTe3h@WeN~hO`R7usaa$i(AH(OFWw3&3Udt^Nj2PwrQQ~=KA>ihR)w)|6w`ze#nye2>BU4F}#dg2sw9x&|#T4MmdZrUpg&(=m zJ``rHAC(o5Sb(TCLmv`G%)+vmLo-Bm9@o$y`=MGmpIAYv%gHMCj2(uq86&dJwrzhi zXgGl%33pxKRhNadI75Mdfvj9>pY8S7vqit$QBPSCd=rj|3t3skVov#Hny1;^&G4r5 zBD)VS#Z%ag_bmJirl(R$yJX???$aetP9J)DnnLS6a^D>C&a`ofj_X@*i6~>q)WQ5= z@r=%N=uA)1=t7U&H;2zV6N{JVxJGlS5@mJ}U(Hdm58xj-D^P&| literal 212 zcmZ3^%ge<81k-=yXW9el#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Pt(n;80F)6nZ2$lO diff --git a/core/__pycache__/apps.cpython-311.pyc b/core/__pycache__/apps.cpython-311.pyc index 6f131d4873bc56e3763e4ed09960c6e3f34140e1..3015915b08a110105cc87247a5aab472d3977832 100644 GIT binary patch delta 20 acmeBS>0#ks&dbZi00fSivo~@xG64W9=>z)! delta 20 acmeBS>0#ks&dbZi00dRv@;7obG64WD>I9Vl diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index 75bf2234fb21a6b62efc5cec11af9512dd0c9616..927f7c5eaf9cfa0c9ee1c35a2761ea114917e691 100644 GIT binary patch delta 20 acmey(`kR$|IWI340}wc7&fduVfe8RUWd+Ir delta 20 acmey(`kR$|IWI340}xbw%iqZTfe8RYW(H&c diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640edbdcec3e5c1744466c916e7acdd2763b..5f509bef3edabe3cbeebb39ffa06f7de24368270 100644 GIT binary patch literal 3382 zcmaJ@-A^0Y6(8H<5A4CjHiRUQ;4UGH+XUK#M(J)96+uEtb|G5BuH;lZ8hi&bjz8Et zGn)nV!TC_jL!?Ek2p*zrX;o2B{9tWUEzRym`xmV4Nb_LL(@Oiq8wj3wY0sIl4H(*M z`^=qtfA`#T&pG#Z{Ez15AP4Qw%5!DU$8kU5ORagUot=-Nv&<2WxUyW%m2$Z_H#fo& z_Y;nIWLL&rTd?ZkxR>yATFPUictCmo4~i$gB$x1S;-ZAh^5qId&Z_CE68iy$*=^^E z3k{LEl#6gFH*pd7j2pL+`Ap4NFp2QQTkjy zkc3LYDje};{g|ny228W9D||#((8h&ox=9N;K_aDSgJnX4wwUZ8t);dGRI`l=*L9sF z?WI!ym?9ocjLAbgs{~cN& zdRj}kEx(diwL<#7-Uhp{FXHSwRyICoU%~T@@z8i=ECDE3(6z#}gNq~X1^XBK7J$#< z?5kszY+eS?#Jn&%9RH|5$sH=IYQkd$bJAyGR?g38_bi{DS3c2YOZZf#Qw3EP^HNS$ zcHy*o0C)I1Z2yS8N$|7@UM=rbR?6SE_`IIYQVh!Ge?aK%2z|lI>}#;N9LE*dF^b0H zb+^6J0TTqbB6tzz9_eU-RPp3h! zU1PA2N9V4?Q;+b)! zyo3jXy?a7!gZE`k(or+}TP?1RkL#~&V_vwV6*P#3DrIGLEa9^PqMb{kXaz+P?ANn0 z^aWA;M3=JY2vM{hY{d?y9z;{8Qq~GUzRFa|&#ZIwE!djIL0CMRLeE1NGfw>(h+_Ry zY42VTD(5b;Ku4wZEf(uu2;j$A{tJMPCE92YJn01#Z-cN}lM~}Zx5ebd;KXE79QytE z=+KQM#V}e;L-!4sP}bC7lwJP7?cin?1U z^0qC|aP=Js^1fGo3|y=P-r4ecI(>{kwH4%=&o10Fh0Zm1dEomz6DAE|(iA3(H!4EM z!p*1SD{A@t#ss^QV!~ZRxN8b`VJg(IaMcWTtf=faAFxo;2qn!>vN&7`o>{nH2G6Xd z%dH#3Y+Po+X(Kpo2B(Wd6`>3F=~}zIA+a%u2~&nJWeQWEE!Mqw)r@toQTFaQ`#8&D zIU|-cW4Ypcm1xi61vA>SCb8>dEIMvP$Ia+?@%E3Ap2d@9q^CT)&z=#Z(k%8i^E#Boly~Wjq&*MG6#T^yfIJSGtgyUB9=%I^KFP}fa%>KoJQsBw( zFl0B`3vV?fRC?krc^XQi-(G>#YPV{c1ukkRjh+l%I0xe=0n$_oHWagvtqHl#L4}A= zYHlbr%_IzkC~Oy^7AQm~8s=L_1g?72YWh&3ilixpycPVk)>ZWm(9FIx9wIN=rD%iw z`vAE^DQPO?Mfj^BYmn_!&f1xZciX<%6p!gJ#R@3+ntf|58AaLxqZApQMsfZ$h&tC- ztHu&g_n!c~Ok;?%sXC6hWgzKq*oLtH`d-@=FAnCthOshxWh~KC06N6Vcq8z)(+A=( zD`#qC$UTQx0bk=bc6-jf@PJ?3WAmQ)r8peZKkF1~=f?A@GB49}0ChOr<|g}g&PVEw ztkE*wQWc2;XgPZF*+nzj&04O&ca1MKIXxD*VrSiCmeCrm>LY^_rm-8 z*({B=X7ab?Ih(XB|IlD^XmI!j{T)oxODG0W;J+7o1;wvHSYd}wp?u^u zMVtHIboeeVL4ie1{T{>td&6A|(`LA9#b3Vq>N>mghb@lFx<=jbXu0Lyw&kuZiz9W~ zqZ?rs8Zkm6W@rRh?+~*oOvo5Q#uPHZY;C=ZADV5w

*0vo>P15wndH$B>i;kd&&z z=l1?;i#sZ|acuXP3CF2;B#4{UL^4u-rqD;GoJ!?=AOG$2_G$hL DGESER literal 209 zcmZ3^%ge<81k-=yXIcX3#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xLi8T)Z diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659f6c6e0ae848e54157af197c543a09315f..d8584994b38c0a86014a8d7039350b003466c9f5 100644 GIT binary patch literal 501 zcmZ8dzfZzI6uxV(P^hTjN^~YMZQ`aeOe`|E7?&=j_AXH9uUuO}r;hvwnz%S=jQ$n= z1;sFsn@pV8NZ6RX6FT6#ckkZ4eBXQD-D{;%2HZZKC+CZwKjM;GVUsL$;r6zQGAgBc;|a`%Uh+b?bC%R4)Q}IVk;|wk)Ce)AKz>=51>e%Q7 z9x;-e#E%n$jEJ4Y0X2pJ9YmpJ6GJF9#3((yTdC(B7wD2Et#Pt=Q#9aVAwvjfpq_2} z3>;+J{;gG0bx{CHDQ%5wG^u4MLESqAj594mSv`v7lRev;sy!>O({t&$}3*U@R?z<4WmsAA5ay@)M76n@qw9< zk?{tD%mq~RfI<8MD*C|2z{=U+(jn9lGK1{`i~L0v`712)ADEf=nHso3u!sj}902oi BLXZFe diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd69370b38a98d8b01bf8eb9817c42f16ed6..d5c6a5a9265dc035e3341711f0627375a8ae2406 100644 GIT binary patch literal 1466 zcmZuw&u`O66rQnTI}L7vX(=qNAPW(ZC8#+R!~q3~6$0%_?IO?~a*5K+K%LrgJ9hX{ zr6LCo2qA&E6bTN!P*{~efaCrHD?|UzA-n{S4 z>*3)Hg7uI6!v0r6=#wzw1$MNyO7K}h1QF~Y7niXsl_iXbL}W*HQ{|MalohZMNja*k zl{L_n2dJDTD##(CT}Nj6i%4ZkTxGODDC5R08dSX5I<3KnRi@5NeZkui+MmoL&04^R z{;D#&8rWXL#2jC%34gpaP-OURserDa7OKY{wAvq+paic0zMlA&aga)!s4j9vYqbxJ zF@)AYT~EwqsfF28OIlSDs80!oe;6(NRvJ8amscM2F2TJ9k!2~!_2q*ex8QW5yp-0U z=Jlj*=&?G@@glS;*QmO*Qn71ZBdFR9AE2y1-|Rz{ay5@p%LXRyPR<3c1H_~kw%hJ= zWwA-wJu}VaE0=F@8Hi#kl)$xZx_mBI9fzwoZ6~0NrNPBS8K%rNM&ZAHz_J1qeei`R zpU;0kZOwTuwVJcdM$okAU0Q1f9<%OvY~Ej})~FR#blawP{KMlzNU!B{~-GHwV3eQ_`rcn$3J1cQ;1>WQ_Q z&?=I~Yu6CU!BFf$@Bj#8Xvsw0V=z+FFapxT{Lp~nkG;~~T*w3*@i zNxj;*^IBcJ|sKI@%fBn<*W`U?pNg6Xwq%D(HW?$wI;a literal 1364 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 - - + - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}Адмін-панель WooCommerce{% endblock %} + + + + + + + + + + {% load static %} + + + {% block head %}{% endblock %} - - {% block content %}{% endblock %} - - +

+ +
+ {% block content %}{% endblock %} +
+ + + + + {% block scripts %}{% endblock %} + + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..116b392 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,77 @@ -{% extends "base.html" %} +{% extends 'base.html' %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Товари — Адмін-панель{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+

Товари

+
+
+ + +
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
-{% endblock %} \ No newline at end of file + + +
+
+ + + + + + + + + + + + + + {% for p in products %} + + + + + + + + + + {% empty %} + + + + {% endfor %} + +
ФотоНазва товаруАртикул (SKU)Ціна (грн)СтатусПроданоДії
+ {% if p.image %} + {{ p.name }} + {% else %} +
N/A
+ {% endif %} +
+
{{ p.name }}
+
WP ID: {{ p.wp_id }}
+
{{ p.sku|default:"-" }} +
{{ p.price }} ₴
+
+ + {% if p.stock_status == 'instock' %} + В наявності + {% else %} + Немає + {% endif %} + + + {{ p.total_sales }} + + Деталі +
+
Товарів не знайдено.
+
Спробуйте інший запит або запустіть синхронізацію.
+
+
+
+{% endblock %} diff --git a/core/templates/core/product_detail.html b/core/templates/core/product_detail.html new file mode 100644 index 0000000..adc4326 --- /dev/null +++ b/core/templates/core/product_detail.html @@ -0,0 +1,95 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}{{ product.name }} — Деталі товару{% endblock %} + +{% block content %} +
+ + + + + Назад до списку + +
+

{{ product.name }}

+
WordPress ID: {{ product.wp_id }}
+
+
+ +
+ +
+
+ {% if product.image %} + {{ product.name }} + {% else %} +
N/A
+ {% endif %} +
+
+
Ціна
+
{{ product.price }} ₴
+
+
+
Артикул (SKU)
+
{{ product.sku|default:"-" }}
+
+
+
Статус
+ + {% if product.stock_status == 'instock' %} + В наявності + {% else %} + Немає в наявності + {% endif %} + +
+
+
Усього продано
+
{{ product.total_sales }}
+
+
+
+
+ + +
+
+
+

Варіації (Розміри)

+
+
+
+ + + + + + + + + + {% for v in variations %} + + + + + + {% empty %} + + + + {% endfor %} + +
РозмірЦіна варіаціїЗалишок на складі
{{ v.size }}{{ v.price }} ₴ + + {{ v.stock_quantity }} + +
Варіацій для цього товару не знайдено.
+
+
+
+
+
+{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..9f96454 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,9 @@ from django.urls import path +from . import views -from .views import home +app_name = 'core' urlpatterns = [ - path("", home, name="home"), -] + path('', views.product_list, name='index'), + path('product//', views.product_detail, name='product_detail'), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..b3ce818 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,26 @@ -import os -import platform +from django.shortcuts import render, get_object_or_404 +from .models import Product, Variation +from django.db.models import Q -from django import get_version as django_version -from django.shortcuts import render -from django.utils import timezone +def product_list(request): + query = request.GET.get('q') + products = Product.objects.all() + + if query: + products = products.filter( + Q(name__icontains=query) | Q(sku__icontains=query) + ) + + return render(request, 'core/index.html', { + 'products': products, + 'query': query + }) - -def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() - - context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), - } - return render(request, "core/index.html", context) +def product_detail(request, pk): + product = get_object_or_404(Product, pk=pk) + variations = product.variations.all() + + return render(request, 'core/product_detail.html', { + 'product': product, + 'variations': variations + }) \ No newline at end of file diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..5aea72d 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,101 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +:root { + --apple-bg: #FBFBFB; + --apple-card: #FFFFFF; + --apple-text: #1D1D1F; + --apple-text-muted: #86868B; + --apple-accent: #0071E3; + --apple-border: rgba(0,0,0,0.1); } + +body { + background-color: var(--apple-bg); + color: var(--apple-text); + font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; +} + +.navbar { + background-color: rgba(255, 255, 255, 0.8); + backdrop-filter: saturate(180%) blur(20px); + border-bottom: 1px solid var(--apple-border); + padding: 0.8rem 1rem; +} + +.card { + background: var(--apple-card); + border: 1px solid var(--apple-border); + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0,0,0,0.05); + transition: transform 0.2s ease, box-shadow 0.2s ease; + overflow: hidden; +} + +.card:hover { + box-shadow: 0 8px 24px rgba(0,0,0,0.08); +} + +.table { + margin-bottom: 0; +} + +.table thead th { + background: #F5F5F7; + border-bottom: 1px solid var(--apple-border); + color: var(--apple-text-muted); + font-weight: 500; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 12px 16px; +} + +.table tbody td { + padding: 16px; + vertical-align: middle; + border-bottom: 1px solid var(--apple-border); +} + +.btn-primary { + background-color: var(--apple-accent); + border: none; + border-radius: 8px; + font-weight: 500; + padding: 8px 20px; +} + +.btn-primary:hover { + background-color: #0077ED; +} + +.product-img { + width: 48px; + height: 48px; + object-fit: cover; + border-radius: 8px; + background-color: #eee; +} + +.status-instock { + color: #34C759; + font-weight: 600; +} + +.status-outofstock { + color: #FF3B30; + font-weight: 600; +} + +.search-input { + border-radius: 10px; + border: 1px solid var(--apple-border); + background-color: #F5F5F7; + padding: 10px 16px; + font-size: 0.9rem; +} + +.search-input:focus { + background-color: #fff; + box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.1); + border-color: var(--apple-accent); + outline: none; +} \ No newline at end of file