- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
1 line
9.7 KiB
CSS
1 line
9.7 KiB
CSS
/*! 🌼 daisyUI 5.5.17 - MIT License */ @layer utilities{.link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}@media (width>=640px){.sm\:link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.sm\:link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.sm\:link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.sm\:link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.sm\:link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.sm\:link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.sm\:link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.sm\:link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.sm\:link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.sm\:link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}}@media (width>=768px){.md\:link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.md\:link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.md\:link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.md\:link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.md\:link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.md\:link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.md\:link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.md\:link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.md\:link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.md\:link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}}@media (width>=1024px){.lg\:link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.lg\:link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.lg\:link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.lg\:link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.lg\:link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.lg\:link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.lg\:link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.lg\:link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.lg\:link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.lg\:link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}}@media (width>=1280px){.xl\:link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.xl\:link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.xl\:link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.xl\:link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.xl\:link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.xl\:link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.xl\:link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.xl\:link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.xl\:link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.xl\:link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}}@media (width>=1536px){.\32 xl\:link{@layer daisyui.l1.l2.l3{&{cursor:pointer;text-decoration-line:underline}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){&{outline-offset:2px;outline:2px solid #0000}}}&:focus-visible{outline-offset:2px;outline:2px solid}}}.\32 xl\:link-hover{@layer daisyui.l1.l2{&{text-decoration-line:none}&:hover{@media (hover:hover){&{text-decoration-line:underline}}}}}.\32 xl\:link-primary{@layer daisyui.l1.l2{&{color:var(--color-primary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}}.\32 xl\:link-secondary{@layer daisyui.l1.l2{&{color:var(--color-secondary)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-secondary)80%,#000)}}}}.\32 xl\:link-accent{@layer daisyui.l1.l2{&{color:var(--color-accent)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-accent)80%,#000)}}}}.\32 xl\:link-neutral{@layer daisyui.l1.l2{&{color:var(--color-neutral)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-neutral)80%,#000)}}}}.\32 xl\:link-success{@layer daisyui.l1.l2{&{color:var(--color-success)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-success)80%,#000)}}}}.\32 xl\:link-info{@layer daisyui.l1.l2{&{color:var(--color-info)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-info)80%,#000)}}}}.\32 xl\:link-warning{@layer daisyui.l1.l2{&{color:var(--color-warning)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-warning)80%,#000)}}}}.\32 xl\:link-error{@layer daisyui.l1.l2{&{color:var(--color-error)}@media (hover:hover){&:hover{color:color-mix(in oklab,var(--color-error)80%,#000)}}}}}} |