- 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
5.8 KiB
CSS
1 line
5.8 KiB
CSS
/*! 🌼 daisyUI 5.5.17 - MIT License */ @layer utilities{.avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}@media (width>=640px){.sm\:avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.sm\:avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.sm\:avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.sm\:avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.sm\:avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}}@media (width>=768px){.md\:avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.md\:avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.md\:avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.md\:avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.md\:avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}}@media (width>=1024px){.lg\:avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.lg\:avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.lg\:avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.lg\:avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.lg\:avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}}@media (width>=1280px){.xl\:avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.xl\:avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.xl\:avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.xl\:avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.xl\:avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}}@media (width>=1536px){.\32 xl\:avatar-group{@layer daisyui.l1.l2.l3{&{display:flex;overflow:hidden}& .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}}}.\32 xl\:avatar{@layer daisyui.l1.l2.l3{&{vertical-align:middle;display:inline-flex;position:relative}&>div{aspect-ratio:1;display:block;overflow:hidden}& img{object-fit:cover;width:100%;height:100%}}}.\32 xl\:avatar-placeholder{@layer daisyui.l1.l2{&>div{justify-content:center;align-items:center;display:flex}}}.\32 xl\:avatar-online{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}.\32 xl\:avatar-offline{@layer daisyui.l1.l2{&:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}}}}} |