diff --git a/.dockerignore b/.dockerignore index 48e8d2b..9644126 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,6 +18,9 @@ frontend-nuxt/.output # Runtime data (mounted at run time, not needed for build) grids +# Backup dir often has root-only permissions; exclude from build context +backup + # Misc *.log .env* diff --git a/frontend-nuxt/assets/css/app.css b/frontend-nuxt/assets/css/app.css index 078071d..b16f285 100644 --- a/frontend-nuxt/assets/css/app.css +++ b/frontend-nuxt/assets/css/app.css @@ -46,6 +46,8 @@ @theme { --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, monospace; + --radius-card: 1rem; + --duration-transition: 200ms; } html, @@ -54,6 +56,41 @@ body, height: 100%; } +/* Consistent focus ring for interactive elements */ +@layer components { + .focus-ring:focus-visible { + outline: none; + box-shadow: 0 0 0 2px var(--color-base-100), 0 0 0 4px var(--color-primary); + } + button:focus-visible, + [type="button"]:focus-visible, + [type="submit"]:focus-visible, + [type="reset"]:focus-visible, + a[href]:focus-visible, + input:focus-visible, + select:focus-visible, + textarea:focus-visible, + [role="button"]:focus-visible { + outline: none; + box-shadow: 0 0 0 2px var(--color-base-100), 0 0 0 4px var(--color-primary); + } + /* Unified card style */ + .card-app { + @apply rounded-xl shadow-xl border border-base-300/50 bg-base-100; + } + .card-app.card-bg-base-200 { + @apply bg-base-200; + } + /* Modal box aligned with cards */ + .modal-box { + @apply rounded-xl border border-base-300/50; + } + /* Primary button: subtle transition, no per-page scale */ + .btn-primary { + @apply transition-[transform,color,background-color] duration-200; + } +} + @keyframes login-card-in { from { opacity: 0; diff --git a/frontend-nuxt/layouts/default.vue b/frontend-nuxt/layouts/default.vue index a60f366..43f5fdc 100644 --- a/frontend-nuxt/layouts/default.vue +++ b/frontend-nuxt/layouts/default.vue @@ -60,7 +60,7 @@