Imported tailwind libraries, started to re-write main page

This commit is contained in:
2025-05-12 00:43:28 +01:00
parent d9e8b4b56c
commit fc642a4ecd
11 changed files with 488 additions and 412 deletions

View File

@@ -8,62 +8,21 @@
}
</script>
<style>
.card {
display: flex;
flex-direction: column;
justify-content: space-between;
flex-wrap: wrap;
flex: 2 1 15em;
padding: .5em 2.5em 2em 2.5em;
background: var(--bg-secondary);
border-radius: .5em;
scroll-snap-align: start;
transition: all 0.2s;
box-shadow: .25em .25em .5em var(--hover);
}
.card:hover, .card:focus-within {
box-shadow: .5em .5em .5em var(--hover);
transform: scale(1.02);
}
.card .card-header :global(div) {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0em;
width: 100%;
}
.card .card-content :global(div) {
display: flex;
align-items: center;
justify-content: center;
max-width: 100%;
}
.card .card-footer :global(div){
margin-bottom: 1em;
display: flex;
gap: 1em;
max-width: 100%;
justify-content: space-between;
}
</style>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div class="card" on:click={onClick}>
<div class="card-header">
<div
class="flex flex-col justify-between p-6 bg-secondary rounded-lg shadow-lg transition-all duration-200 hover:shadow-xl hover:scale-[1.02] snap-start"
on:click={onClick}
>
<div class="card-header flex items-center justify-between w-full mb-0">
<slot name="header"></slot>
</div>
<hr />
<div class="card-content">
<div class="card-content flex items-center justify-center w-full max-w-full">
<slot name="content"></slot>
</div>
<hr class="not-required"/>
<div class="card-footer">
<hr class="not-required" />
<div class="card-footer flex gap-4 w-full max-w-full justify-between mb-4">
<slot name="footer"></slot>
</div>
</div>

View File

@@ -8,95 +8,31 @@
}
</script>
<style>
.sliding-card {
display: flex;
flex-direction: column;
justify-content: space-between;
flex-wrap: wrap;
flex: 2 1 15em;
padding: 0.5em 2.5em 2em 2.5em;
background: var(--bg-secondary);
border-radius: 0.5em;
scroll-snap-align: start;
transition: all 0.3s ease-in-out;
overflow: hidden;
position: relative;
}
.sliding-card:hover {
box-shadow: .5em .5em .5em var(--hover);
}
.sliding-card .sliding-card-header :global(div) {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0em;
}
.content-wrapper {
position: relative;
width: 100%;
overflow: hidden; /* Ensure smooth sliding */
}
.sliding-card-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
max-width: 100%;
flex-grow: 1;
z-index: 1; /* Keep it below the sliding content */
}
.sliding-content {
position: absolute; /* Now it sits on top */
top: 0;
left: 0;
width: 100%;
height: 100%; /* Cover entire content */
background: var(--bg-secondary);
transform: translateY(100%); /* Start hidden */
transition: transform 0.3s ease-in-out;
z-index: 2; /* Now above main content */
}
.sliding-card:hover .sliding-content {
transform: translateY(0);
}
.sliding-card .sliding-card-footer :global(div){
margin-bottom: 1em;
display: flex;
gap: 1em;
max-width: 100%;
justify-content: space-between;
}
</style>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div class="sliding-card" on:click={onClick}>
<div class="sliding-card-header">
<div
class="sliding-card flex flex-col justify-between flex-wrap flex-[2_1_15em] p-2 bg-secondary rounded-lg snap-start transition-all duration-300 overflow-hidden relative hover:shadow-lg"
on:click={onClick}
>
<div class="sliding-card-header w-full flex items-center justify-between mb-0">
<slot name="header"></slot>
</div>
<hr />
<!-- Wrapper to stack sliding-card-content and sliding-content -->
<div class="content-wrapper">
<div class="sliding-card-content">
<div class="content-wrapper relative w-full overflow-hidden">
<div class="sliding-card-content flex flex-col items-center justify-center max-w-full flex-grow z-[1]">
<slot name="content"></slot>
</div>
<div class="sliding-content">
<div
class="sliding-content absolute top-0 left-0 w-full h-full bg-secondary translate-y-full transition-transform duration-300 z-[2] pointer-events-none group-hover:translate-y-0 sliding-card:hover:translate-y-0"
>
<slot name="sliding-content"></slot>
</div>
</div>
<hr class="not-required"/>
<div class="sliding-card-footer">
<hr class="not-required" />
<div class="sliding-card-footer flex gap-4 max-w-full justify-between mb-4">
<slot name="footer"></slot>
</div>
</div>

View File

@@ -10,73 +10,30 @@
<!-- svelte-ignore a11y-click-events-have-key-events a11y-no-noninteractive-element-interactions -->
<dialog
bind:this={dialog}
on:close={() => (showModal = false)}
on:click|self={() => dialog.close()}
bind:this={dialog}
on:close={() => (showModal = false)}
on:click|self={() => dialog.close()}
class="max-w-[70vw] rounded-md border-0 p-0 shadow-lg bg-bg text-fg relative animate-[zoom_0.5s_cubic-bezier(0.34,1.56,0.64,1)]"
style="box-shadow: 0.5em 0.5em 0.5em var(--header);"
>
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div on:click|stopPropagation>
<slot name="header" />
<hr />
<slot />
<hr />
</div>
<button class="close" on:click={() => dialog.close()}>
<CloseIcon width="0.8em" />
</button>
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div on:click|stopPropagation class="p-4">
<slot name="header" />
<hr class="my-2 border-accent" />
<slot />
<hr class="my-2 border-accent" />
</div>
<button
class="close absolute top-4 right-6 text-fg bg-transparent border-0 p-0 m-0 leading-none text-[1.2em] hover:text-accent"
on:click={() => dialog.close()}
>
<CloseIcon width="0.8em" />
</button>
</dialog>
<style>
dialog {
max-width: 70%;
border-radius: 0.2em;
border: none;
padding: 0em 2em 2em 2em;
border-left: 2em;
border-right: 2em;
background: var(--bg);
color: var(--fg);
box-shadow: .5em .5em .5em var(--header);
}
dialog::backdrop {
background: rgba(0, 0, 0, 0.7);
}
dialog > div {
padding: 1em;
}
dialog[open] {
animation: zoom 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes zoom {
from {
transform: scale(0.95);
}
to {
transform: scale(1);
}
}
dialog[open]::backdrop {
animation: fade 0.3s ease-out;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.close {
position: absolute;
top: 1em;
right: 1.5em;
color: var(--fg);
background: transparent;
border: 0 none;
padding: 0;
margin: 0 0 0 auto;
line-height: 1;
font-size: 1.2em;
from { transform: scale(0.95); }
to { transform: scale(1); }
}
</style>