- Move React/Vite frontend to apps/web/ (@budgetwise/web)
- Add apps/appwrite/ (@budgetwise/appwrite) to source-control the
Appwrite backend: declarative schema in appwrite.json (5 collections),
CLI-based deploy.sh for containerized use, functions/ dir for future
Appwrite Functions
- Add turbo.json for task orchestration (build, deploy, dev)
- Replace .gitlab-ci.yml with Woodpecker CI pipelines in .woodpecker/:
web-production.yml — push to main → build + rsync to prod
web-staging.yml — push to staging → build + rsync to staging
web-preview.yml — PR open → deploy to {pr}.{domain}; PR close → cleanup
appwrite.yml — schema changes in apps/appwrite/ → CLI deploy
- All secrets injected via Woodpecker CI (no committed .env files)
77 lines
1.8 KiB
CSS
77 lines
1.8 KiB
CSS
@tailwind base;
|
||
@tailwind components;
|
||
@tailwind utilities;
|
||
|
||
@layer base {
|
||
* {
|
||
-webkit-tap-highlight-color: transparent;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
html {
|
||
font-family: 'Inter', system-ui, sans-serif;
|
||
background-color: #0f172a;
|
||
color: white;
|
||
overscroll-behavior: none;
|
||
/* Support for safe areas on modern Android/iOS */
|
||
padding-top: env(safe-area-inset-top);
|
||
}
|
||
|
||
body {
|
||
margin: 0;
|
||
padding: 0;
|
||
min-height: 100dvh;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
/* Scrollbar */
|
||
::-webkit-scrollbar {
|
||
width: 4px;
|
||
}
|
||
::-webkit-scrollbar-track {
|
||
background: transparent;
|
||
}
|
||
::-webkit-scrollbar-thumb {
|
||
background: #334155;
|
||
border-radius: 4px;
|
||
}
|
||
|
||
/* Number inputs – remove spinners */
|
||
input[type='number']::-webkit-inner-spin-button,
|
||
input[type='number']::-webkit-outer-spin-button {
|
||
-webkit-appearance: none;
|
||
margin: 0;
|
||
}
|
||
input[type='number'] {
|
||
-moz-appearance: textfield;
|
||
}
|
||
|
||
/* Date input dark styling */
|
||
input[type='date']::-webkit-calendar-picker-indicator {
|
||
filter: invert(1) opacity(0.5);
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* Select arrow */
|
||
select {
|
||
-webkit-appearance: none;
|
||
appearance: none;
|
||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
|
||
background-repeat: no-repeat;
|
||
background-position: right 12px center;
|
||
padding-right: 36px !important;
|
||
}
|
||
}
|
||
|
||
@layer utilities {
|
||
/* Bottom safe area for PWA on Android/iOS */
|
||
.safe-area-bottom {
|
||
padding-bottom: env(safe-area-inset-bottom, 0px);
|
||
}
|
||
|
||
/* Full viewport height that respects the browser UI on mobile */
|
||
.h-dvh {
|
||
height: 100dvh;
|
||
}
|
||
}
|