From 4713dc6305dab4ddfa5c4aab40086a009818c6bb Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 16 Dec 2025 14:42:48 +0000 Subject: [PATCH] beta --- accounting/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 163 bytes accounting/__pycache__/admin.cpython-311.pyc | Bin 0 -> 1887 bytes accounting/__pycache__/apps.cpython-311.pyc | Bin 0 -> 542 bytes accounting/__pycache__/models.cpython-311.pyc | Bin 0 -> 5909 bytes accounting/__pycache__/urls.cpython-311.pyc | Bin 0 -> 683 bytes accounting/__pycache__/views.cpython-311.pyc | Bin 0 -> 2541 bytes accounting/admin.py | 22 ++ accounting/apps.py | 6 + accounting/migrations/0001_initial.py | 24 ++ .../migrations/0002_journalentry_ledger.py | 32 +++ .../migrations/0003_invoice_invoiceitem.py | 36 +++ accounting/migrations/0004_bill_billitem.py | 36 +++ accounting/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1406 bytes .../0002_journalentry_ledger.cpython-311.pyc | Bin 0 -> 1836 bytes .../0003_invoice_invoiceitem.cpython-311.pyc | Bin 0 -> 2156 bytes .../0004_bill_billitem.cpython-311.pyc | Bin 0 -> 2133 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 174 bytes accounting/models.py | 74 +++++++ .../templates/accounting/account_list.html | 25 +++ .../templates/accounting/bill_list.html | 31 +++ .../templates/accounting/invoice_list.html | 29 +++ .../templates/accounting/trial_balance.html | 32 +++ accounting/tests.py | 3 + accounting/urls.py | 11 + accounting/views.py | 43 ++++ config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5564 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 1653 bytes config/settings.py | 1 + config/urls.py | 1 + core/templates/base.html | 44 +++- core/templates/core/index.html | 206 ++++++------------ static/css/custom.css | 93 +++++++- staticfiles/css/custom.css | 102 +++++++-- 35 files changed, 689 insertions(+), 162 deletions(-) create mode 100644 accounting/__init__.py create mode 100644 accounting/__pycache__/__init__.cpython-311.pyc create mode 100644 accounting/__pycache__/admin.cpython-311.pyc create mode 100644 accounting/__pycache__/apps.cpython-311.pyc create mode 100644 accounting/__pycache__/models.cpython-311.pyc create mode 100644 accounting/__pycache__/urls.cpython-311.pyc create mode 100644 accounting/__pycache__/views.cpython-311.pyc create mode 100644 accounting/admin.py create mode 100644 accounting/apps.py create mode 100644 accounting/migrations/0001_initial.py create mode 100644 accounting/migrations/0002_journalentry_ledger.py create mode 100644 accounting/migrations/0003_invoice_invoiceitem.py create mode 100644 accounting/migrations/0004_bill_billitem.py create mode 100644 accounting/migrations/__init__.py create mode 100644 accounting/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 accounting/migrations/__pycache__/0002_journalentry_ledger.cpython-311.pyc create mode 100644 accounting/migrations/__pycache__/0003_invoice_invoiceitem.cpython-311.pyc create mode 100644 accounting/migrations/__pycache__/0004_bill_billitem.cpython-311.pyc create mode 100644 accounting/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 accounting/models.py create mode 100644 accounting/templates/accounting/account_list.html create mode 100644 accounting/templates/accounting/bill_list.html create mode 100644 accounting/templates/accounting/invoice_list.html create mode 100644 accounting/templates/accounting/trial_balance.html create mode 100644 accounting/tests.py create mode 100644 accounting/urls.py create mode 100644 accounting/views.py diff --git a/accounting/__init__.py b/accounting/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounting/__pycache__/__init__.cpython-311.pyc b/accounting/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbc0960e78b1d358d64d9bb26cfcf4be55824176 GIT binary patch literal 163 zcmZ3^%ge<81V1wzGePuY5CH>>P{wCAAY(d13PUi1CZpder~FM zX;NukNvVEnMQU2X#0(Sz0Ie4%9RL6T literal 0 HcmV?d00001 diff --git a/accounting/__pycache__/admin.cpython-311.pyc b/accounting/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b75e5d057a83d071dab00666dca9490caf40df7 GIT binary patch literal 1887 zcmbVM%}*0S6o1qG=(e=wTZo{7aIl!rgYjleFe1Sq7cnNQNwah(b#Xs%+A72g2mSzV zaP)*R{4-m#(PplmxIy5=$$7h7C@nU^?Cx)8-}}w`oZ0W$Y#PLPw>D?3Bmn;4M?93~ zTgXU{58-qV~cR;k0~XO?Yq4H3UfQFsx?wLG~c zzITCwPE61fRMKUW=!%&Tu}HkX#oVH6TP|g?;4kM@t`&=};m~4{r;A0$Gix@^GsWVk znqfy8mJ(d92qm?-LN}_+_yH&A|LjrWgXhpfZB^t{E6@#Es#QH!_~NmTm35;;3r3W$ z<(3O!A!gS%SyrqJ0b{6)3fMZo8kv!;`9>zYHIEk?im6v8jq28<%LLOFDJOWQnerT# ze>tzP9GdDyz+D>p=SeFpMuiQcD0DWAvym7yF{xl_TO#b8@N<(}3wT9KkbQN0U7M1N z8+y4T?Sb}SEO?yQ076@&w^4?Gw2oR1b<`56SI63=mMM(%Uxf@Kz$UhbHjXj`EP6)~ z@A$d9twluQa(;m4%r(O;d$T1^oD6G~NkY!maPL(Z{yCY7kVL@lgqxG$Z;)XLcy`5D zt=R@^78UmzPrt&g8zvC7HjEiPa=BtvDc2Y+Ta_whZ8@B2Pog97luZdX9=6I?fkzS{ zqyZED<+}lI{p;UHa)RWJpcD3#VD#ZJDo!u78X@}tV z;Rjb(zK53EVMhu2CeZRdwA|FHK-BH@Zy5XugF6d#7!P3Fhw%m|=hCG*Oa?IN!(^-U mMIFWh81rGQRl2bEz78`1%=j?VDu2G0ufucz(|&x1NA532L3~*N literal 0 HcmV?d00001 diff --git a/accounting/__pycache__/apps.cpython-311.pyc b/accounting/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b3d714e8f5733db530d4d6c829ef3ea6e70e30e GIT binary patch literal 542 zcmZutJx{|h5IrX;D*ZqeL!ko$W0pi>Vn9d*1OrkRwk%c}yJ;X_B#od<9ryukb02BL*QL z!5J{=9+=F@lML{RD>p-8$_1#UcM+;2U2lisap3nH+bS5@Mv7qGL@)*p24R4Ai6Jw| zP?(GwO4?{!R*?7u$G3BhyB&6E`gWkPuI2@dyRmlU*zIHxoI2cPX~kS!=%}T%OsQ{r zoYJ&HDe@Cn;2NdZiRl)ZO~!j>;tr^ZDzul$C?fX)bMeW=p56~Ut|wjmNTTywZXq$! zZ-VG54o!>eKX2-07{*#Sj6~})ryz)1=tiqCZS7B#=CrysIuRqPFS#96POC+ILMReV z&82DrWyB3ci}FEU%wg2PQ1miBM>mrRAye3${GPKliEPi{uX`ANh||x1QrTnQ>H&&n literal 0 HcmV?d00001 diff --git a/accounting/__pycache__/models.cpython-311.pyc b/accounting/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9cc293e5d851aefff27af2caa6d81476ee6927f GIT binary patch literal 5909 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 literal 0 HcmV?d00001 diff --git a/accounting/__pycache__/views.cpython-311.pyc b/accounting/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de20ae362e76c227f3df70f788124b0d1fbf0bc2 GIT binary patch literal 2541 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 A0RR91 literal 0 HcmV?d00001 diff --git a/accounting/migrations/__pycache__/0003_invoice_invoiceitem.cpython-311.pyc b/accounting/migrations/__pycache__/0003_invoice_invoiceitem.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90205cda72a6aecf0a8985ab21e7821ee3a27ceb GIT binary patch literal 2156 zcmb7FJ#5=X6ecN&`myX#j$>I$WJyL4R6%SxwhI__(8iYP)=A?gby}cW2#R->sZgX! zQf{0nLx+yp>M@gxA{sh+=-@FxmlME2xG6vhs1{1#V=95ZsWB+x`lYgme-nTAcpmWi-#t3zIIIx{3*R0XCRdwOdE z;v0M|Byc!hNrkw7$xbkDwxr6G1F4!{FXp!*H( zyl(rs|6%*2r|;iwPkTJcKpUER7Zb{OJg?g)b+d1x1nbU!5Z48dYc$Y@$C^RpxuzKG zHl>qQDp;W$n(pS`_UXI+Y6!J)RDj$o()g_)=U4(Ns%mx&M>869YJPrxL2jBI%TRP| zIM$x5W7NPFjcypbrlw*lXz1=b6*j7+Fik2Q$COnID-K38G%?DLmlj|l8)&p zx~#Mq+GCanjlc)T%vYrl9Ya_J47%Lb6&2ewitx75(H&nt(i)m$({NkSP>HuP?2bUg z9xQQN!#c9*$k5IW2e;@5!nSH@ZC0H$_CrSjFFAY1tVC#{V`z>HCabt4SW~cNW!Zkj zLrJ4UBWOeeN%n*BQ!mdAj{tAnG-RlF40a|htTQ+IUJ@L0vviimWRH|(nvi9996CCN zbyAiAi_UN}3gI?35H?f|+ZKCh=t#v2$u0JpSgh!2a!qTjLa^4El{8-2QLN#z3QGND zvg$i;NUfQsjupeFCT^Ry=4iWk!*DR^6k2eCo3D=_6T& z6kU{q6dBIU$8+sHixrADuouuifEIhvC&MX|NWM-{5v*ymM5vkHoZi_=-0c2$Zf>@hE4#Tek>)+VCC0aOwEEO0vOqJuf zsWi!4*`IVXSAPGNWLA2a6*sd&q-%rG=)~9{l87gsb1=MQ!(j3h`Sb@MpC*O*$D&)9 zKdg|#^2@4ESgqawNe4asly@>_0x zi%56-sVS13-M{2!XAkc@T_D-bUUt*XZW8Hha3i@eyT9&Um^~E#h`Y;Qy32RmOAGpA(-jDW0fnuzD4{<`>ha)@MMndbaB@3_?85L!R(O!WH~qpZkcs?>7*0 Xyg1Ed&C@bW#U9)^Da;Brd7 literal 0 HcmV?d00001 diff --git a/accounting/migrations/__pycache__/0004_bill_billitem.cpython-311.pyc b/accounting/migrations/__pycache__/0004_bill_billitem.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3d29acefa3594ccce5afb72a68750b0e6a5467f GIT binary patch literal 2133 zcmbtVJ#5=X6ecN&mSowc634QX=nn{r%7`U3iGiRF+Bi~DxM^IsP6Jd6LFvv46^c|z z%8fH+=+H4+J!W!IL_>xS89ip}3E&{yRG^bL1@@GseRnkN{GmVSQTOxSy}S3lzthiC zQ*i;>dS^xdEg}eiFd}F`^L9{&=_dgRNHm0o2(x5J-B2Uc4L8D~APJudDD;DX!Z_3k z&Ir39L3j$?Z;c2NH-u7TpOI@NiN?En+tys&G94;+ErboHbtKEDnIqz$E-~Gh>upF# zY>SPMB;fFgCL|%okvkK?1t<((1j&Pm-7uhl?zc?|MY&`&;GozbzAJ(Z^kbPxE)xql zyRdi~5CYth_=o)|zR&&2j-hEZgOow?O^?7mr?}i?a5ahyPQQ(%Ee~dQ!2?gB`wh;# zZu^=4VEY``_xHA^xJ)9@hUVYJgwkB*b^DY-=1r7f-PwO7b&g9-1^V!GCy2bzkppf= zIbJ1$70ROAApf>c-}P5pYMep^$h{(s-41e&C7{-7S$)&h%{HB{R;!m(-Q2SD77k|J z#a$Y{t{VoGbadw?l~(JeFimKE*HT+H)?AF}WY5;Sn!T;w$J;dKU|ZJ={UN4_Eo?U} z2dk#m#dLBDo5->`vHvGnP!gd4vY8 zaOT9XWyS}XG0Rk;z%iJYu(81$=lex+t+mo=8dW)|sx+>u@D}t94C{od0t$n{Wfa0a za3VHaI(BUKuF%OE55jHsc-XAQY2v!xUV-r3WX920?Ve^IE$g7vUnc6l&yJ|;mSteg z^r_i(%h6qZ3$L0kZsViF@tc;7^|pBnLM)?>X0|OVp(cci*~Hv6QCr!lt<-POxYff) zui7ud0YDO7-KyNPy13GBLKOQI`~bHApk4XivhO=Rh+5^uUzL+Lu>u)+S>=mldYou^(Sh(gDt`TKrlsrdr<(*A0S03i7Uam@% zk4DL}B)hnC*UK&rvlTB}Axd?W%#-5fCv#r$^4`h|ho~AUHiyNgS8Nic1rSL3!p@wR zzVPfDl3pIBm%a2dQLc`sCT6F{k$5crQh?!*4db~J<~O|j22t*elJg|9xbuORS$zK0i;E<)Hq5MfnKhz( z$!%C*HY_~5`|G#f(hYBE&0D%lurY>^h&2hOOkH}($3s2>CwW79uaW80Df!Xo?6a4H zkd|bc_Oq*unq~hlu^gnBy#!)3cD&CkfG5456Cbl%_*GY7^(uPRFQZTFPl04L>@;B* pheT0?JQ0gTDEPmT@F98MZ!Bj;c`Up;JdS(H`Il_t@IAX6!(S)*KllIu literal 0 HcmV?d00001 diff --git a/accounting/migrations/__pycache__/__init__.cpython-311.pyc b/accounting/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2be6429e6022d9a8be422f2cddd76de54b51d36f GIT binary patch literal 174 zcmZ3^%ge<81V1wzGePuY5CH>>P{wCAAY(d13PUi1CZpdTZlX-=wL5i8I{ke$W+K;i>4BO~Jn1{hJq3={(ZChart of Accounts + + + + + + + + + + + {% for account in accounts %} + + + + + + + {% endfor %} + +
NumberNameTypeBalance
{{ account.number }}{{ account.name }}{{ account.get_type_display }}{{ account.balance }}
+{% endblock %} diff --git a/accounting/templates/accounting/bill_list.html b/accounting/templates/accounting/bill_list.html new file mode 100644 index 0000000..6c0ddb2 --- /dev/null +++ b/accounting/templates/accounting/bill_list.html @@ -0,0 +1,31 @@ +{% extends 'base.html' %} + +{% block title %}Bills{% endblock %} + +{% block content %} +

Bills

+ + + + + + + + + + + + + {% for bill in bills %} + + + + + + + + + {% endfor %} + +
Bill #VendorBill DateDue DateTotalPaid
{{ bill.id }}{{ bill.vendor_name }}{{ bill.bill_date }}{{ bill.due_date }}{{ bill.total_amount }}{{ bill.paid|yesno:"Yes,No" }}
+{% endblock %} diff --git a/accounting/templates/accounting/invoice_list.html b/accounting/templates/accounting/invoice_list.html new file mode 100644 index 0000000..edc0b46 --- /dev/null +++ b/accounting/templates/accounting/invoice_list.html @@ -0,0 +1,29 @@ +{% extends 'base.html' %} + +{% block content %} +

Invoices

+ + + + + + + + + + + + + {% for invoice in invoices %} + + + + + + + + + {% endfor %} + +
Invoice #CustomerDateDue DateTotalPaid
{{ invoice.id }}{{ invoice.customer_name }}{{ invoice.invoice_date }}{{ invoice.due_date }}${{ invoice.total_amount }}{{ invoice.paid|yesno:"Yes,No" }}
+{% endblock %} diff --git a/accounting/templates/accounting/trial_balance.html b/accounting/templates/accounting/trial_balance.html new file mode 100644 index 0000000..510c12e --- /dev/null +++ b/accounting/templates/accounting/trial_balance.html @@ -0,0 +1,32 @@ +{% extends 'base.html' %} + +{% block content %} +

Trial Balance

+ + + + + + + + + + + {% for item in report_data %} + + + + + + + {% endfor %} + + + + + + + + +
Account NumberAccount NameDebitCredit
{{ item.number }}{{ item.name }}{{ item.debit }}{{ item.credit }}
Total{{ total_debits }}{{ total_credits }}
+{% endblock %} diff --git a/accounting/tests.py b/accounting/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/accounting/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/accounting/urls.py b/accounting/urls.py new file mode 100644 index 0000000..55fb769 --- /dev/null +++ b/accounting/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + +app_name = 'accounting' + +urlpatterns = [ + path('accounts/', views.account_list, name='account_list'), + path('trial-balance/', views.trial_balance, name='trial_balance'), + path('invoices/', views.invoice_list, name='invoice_list'), + path('bills/', views.bill_list, name='bill_list'), +] diff --git a/accounting/views.py b/accounting/views.py new file mode 100644 index 0000000..98fe096 --- /dev/null +++ b/accounting/views.py @@ -0,0 +1,43 @@ +from django.shortcuts import render +from .models import Account, Ledger, Invoice, Bill +from django.db.models import Sum + +def account_list(request): + accounts = Account.objects.all() + return render(request, 'accounting/account_list.html', {'accounts': accounts}) + +def trial_balance(request): + accounts = Account.objects.all() + report_data = [] + total_debits = 0 + total_credits = 0 + + for account in accounts: + debit_total = Ledger.objects.filter(account=account).aggregate(Sum('debit'))['debit__sum'] or 0 + credit_total = Ledger.objects.filter(account=account).aggregate(Sum('credit'))['credit__sum'] or 0 + + balance = debit_total - credit_total + + report_data.append({ + 'number': account.number, + 'name': account.name, + 'debit': debit_total, + 'credit': credit_total, + }) + + total_debits += debit_total + total_credits += credit_total + + return render(request, 'accounting/trial_balance.html', { + 'report_data': report_data, + 'total_debits': total_debits, + 'total_credits': total_credits, + }) + +def invoice_list(request): + invoices = Invoice.objects.all() + return render(request, 'accounting/invoice_list.html', {'invoices': invoices}) + +def bill_list(request): + bills = Bill.objects.all() + return render(request, 'accounting/bill_list.html', {'bills': bills}) \ No newline at end of file diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 5be02db206d695487566bb415cb6b1e287631fb4..4b1f668975613a3136d08720207d08f762e4ca8c 100644 GIT binary patch delta 153 zcmdm>y+@mOIWI340}wE0I%bA#61SK$^Gb@$KwJwDVF@CvK!i1jumuvgSc?mCGE0ga hC-(~)GNx}nC>YKt$SK71fdNJ|@O=>5tSQ{i1OSCLC8z)Z delta 140 zcmdm^y+NCIIWI340}#CB)yQ<&$lJxi$Ub=n$DGX$oWjg(azKe9&CQWK$C(&cZC2!W zWimAe37G(iTg;hxB}Jwnt~rRX01=iT!U{y#0Et_y#RWN;B}ERCXA2rKrfohe7|tlj UA;k270Y)_NeGu7fD%{Ql00|EvB>(^b diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 28817aa35512298e6df4bc5c0b678c917f71e36c..90a9a88235bc38617c2a0f73a6dc3b977dd8e52b 100644 GIT binary patch delta 226 zcmbQr^OZ+^IWI340}ya#I%X!aFfcp@abSQ0%J^(FQN5psi6NCWg%e1!q;O4~C9BIE z#godO#S2qhWReO}!kNMi6y<}7rtnm8Gcc^-o%qC9o_84&1H)<{hJY%d)+nA7zF-Cr z*5u!8#(0)Vf;%xeIlnZoBr`8vzltBh+5DGTj**F*ak4CHzw!+hjs}+w*%|CJ*e@s; fUX(DpB4Koq#rO(~@dtJmex?TQ4?L5%vL*lk7Uwaw delta 130 zcmey$GnGeuIWI340}#kssATG}Ffcp@abSQQ%J|GRQN5ojooV6&aZ%1x_AEY_f)uVQ zZU%-m+>;#`MJ6jS$}@skqMSUz3@JdY$-6m@@hsD3PZkMArjHDhlUe&YKd>_MGc|C3 K;F>JTmH+^U!5E - {% block title %}Knowledge Base{% endblock %} + + {% block title %}Smart Accounting{% endblock %} {% if project_description %} @@ -13,13 +14,52 @@ {% endif %} + + + + + + {% load static %} + {% block head %}{% endblock %} - {% block content %}{% endblock %} + + +
+ {% block content %}{% endblock %} +
+ +
+
+

© 2025 Smart Accounting. All rights reserved.

+
+
+ + diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..5b2091a 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,69 @@ -{% extends "base.html" %} +{% extends 'base.html' %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Smart Accounting - Cloud Accounting Software{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+
+
+

Effortless Accounting for Your Business

+

Smart Accounting is a simple, beautiful, and powerful cloud accounting solution designed for modern businesses.

+ Get Started for Free + Learn More +
+
+
+
+
New Invoice
+ Paid +
+
+ Client: + Innovate Corp. +
+
+ Amount: + $1,250.00 +
+
+
+
+
+
+
-

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 + + +
+
+
+
+
+ +
+

Invoicing

+

Create and send professional invoices in seconds.

+
+
+
+
+
+ +
+

Expense Tracking

+

Track your expenses and never miss a deduction.

+
+
+
+
+
+ +
+

Reporting

+

Generate insightful financial reports with a single click.

+
+
+
+
+{% endblock %} diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..f0e75f7 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,91 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +/* static/css/custom.css */ + +:root { + --bs-primary: #4A90E2; + --bs-secondary: #F8F9FA; + --bs-accent-1: #50E3C2; + --bs-dark: #333333; + --bs-font-sans-serif: 'Roboto', sans-serif; + --bs-font-monospace: 'Poppins', sans-serif; } + +body { + font-family: var(--bs-font-sans-serif); + color: var(--bs-dark); + padding-top: 70px; /* Offset for fixed navbar */ +} + +h1, h2, h3, h4, h5, h6 { + font-family: 'Poppins', sans-serif; + font-weight: 600; +} + +.btn-primary { + background-color: var(--bs-primary); + border-color: var(--bs-primary); +} + +.hero-section { + background: linear-gradient(135deg, rgba(74, 144, 226, 0.1), rgba(80, 227, 194, 0.1)); +} + +.invoice-teaser-card { + background-color: white; + border-radius: 15px; + padding: 2rem; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.07); + border: 1px solid #eee; +} + +.bg-success-soft { + background-color: rgba(80, 227, 194, 0.2); + color: #2E856E; +} + +.feature-card { + padding: 2rem; + transition: all 0.3s ease; +} + +.feature-card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.07); + border-radius: 15px; +} + +.icon-circle { + width: 60px; + height: 60px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.icon-circle svg { + color: var(--bs-primary); +} + +.bg-primary-soft { + background-color: rgba(74, 144, 226, 0.1); +} + +.bg-secondary-soft { + background-color: rgba(200, 200, 200, 0.1); +} +.bg-secondary-soft svg { + color: #555; +} + +.bg-accent-soft { + background-color: rgba(80, 227, 194, 0.1); +} + +.bg-accent-soft svg { + color: #2E856E; +} + +.navbar-brand { + font-family: 'Poppins', sans-serif; + font-weight: 700; +} \ No newline at end of file diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 108056f..f0e75f7 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,21 +1,91 @@ +/* static/css/custom.css */ :root { - --bg-color-start: #6a11cb; - --bg-color-end: #2575fc; - --text-color: #ffffff; - --card-bg-color: rgba(255, 255, 255, 0.01); - --card-border-color: rgba(255, 255, 255, 0.1); + --bs-primary: #4A90E2; + --bs-secondary: #F8F9FA; + --bs-accent-1: #50E3C2; + --bs-dark: #333333; + --bs-font-sans-serif: 'Roboto', sans-serif; + --bs-font-monospace: 'Poppins', sans-serif; } + body { - margin: 0; - font-family: 'Inter', sans-serif; - background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end)); - color: var(--text-color); - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - text-align: center; - overflow: hidden; - position: relative; + font-family: var(--bs-font-sans-serif); + color: var(--bs-dark); + padding-top: 70px; /* Offset for fixed navbar */ } + +h1, h2, h3, h4, h5, h6 { + font-family: 'Poppins', sans-serif; + font-weight: 600; +} + +.btn-primary { + background-color: var(--bs-primary); + border-color: var(--bs-primary); +} + +.hero-section { + background: linear-gradient(135deg, rgba(74, 144, 226, 0.1), rgba(80, 227, 194, 0.1)); +} + +.invoice-teaser-card { + background-color: white; + border-radius: 15px; + padding: 2rem; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.07); + border: 1px solid #eee; +} + +.bg-success-soft { + background-color: rgba(80, 227, 194, 0.2); + color: #2E856E; +} + +.feature-card { + padding: 2rem; + transition: all 0.3s ease; +} + +.feature-card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.07); + border-radius: 15px; +} + +.icon-circle { + width: 60px; + height: 60px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.icon-circle svg { + color: var(--bs-primary); +} + +.bg-primary-soft { + background-color: rgba(74, 144, 226, 0.1); +} + +.bg-secondary-soft { + background-color: rgba(200, 200, 200, 0.1); +} +.bg-secondary-soft svg { + color: #555; +} + +.bg-accent-soft { + background-color: rgba(80, 227, 194, 0.1); +} + +.bg-accent-soft svg { + color: #2E856E; +} + +.navbar-brand { + font-family: 'Poppins', sans-serif; + font-weight: 700; +} \ No newline at end of file