feat: add download page

This commit is contained in:
Lukas Werner
2025-08-30 22:14:57 -07:00
parent efee85cf31
commit ee21b17935
13 changed files with 1039 additions and 201 deletions
+281 -68
View File
@@ -11,14 +11,18 @@
--color-yellow-500: oklch(79.5% 0.184 86.047);
--color-green-500: oklch(72.3% 0.219 149.579);
--color-blue-500: oklch(62.3% 0.214 259.815);
--color-slate-950: oklch(12.9% 0.042 264.695);
--color-gray-300: oklch(87.2% 0.01 258.338);
--color-gray-400: oklch(70.7% 0.022 261.325);
--color-gray-500: oklch(55.1% 0.027 264.364);
--color-gray-800: oklch(27.8% 0.033 256.848);
--color-gray-950: oklch(13% 0.028 261.692);
--color-white: #fff;
--spacing: 0.25rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
--text-sm: 0.875rem;
--text-sm--line-height: calc(1.25 / 0.875);
--text-xl: 1.25rem;
--text-xl--line-height: calc(1.75 / 1.25);
--text-2xl: 1.5rem;
--text-2xl--line-height: calc(2 / 1.5);
--text-3xl: 1.875rem;
@@ -31,7 +35,6 @@
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
@@ -228,6 +231,9 @@
.pointer-events-auto {
pointer-events: auto;
}
.pointer-events-none {
pointer-events: none;
}
.collapse {
visibility: collapse;
}
@@ -240,27 +246,15 @@
.relative {
position: relative;
}
.inset-0 {
inset: calc(var(--spacing) * 0);
}
.top-0 {
top: calc(var(--spacing) * 0);
}
.right-0 {
right: calc(var(--spacing) * 0);
}
.bottom-0 {
bottom: calc(var(--spacing) * 0);
}
.left-0 {
left: calc(var(--spacing) * 0);
}
.left-1 {
left: calc(var(--spacing) * 1);
}
.left-1\/2 {
left: calc(1/2 * 100%);
}
.z-50 {
z-index: 50;
}
@@ -294,6 +288,9 @@
.mt-1 {
margin-top: calc(var(--spacing) * 1);
}
.mt-4 {
margin-top: calc(var(--spacing) * 4);
}
.mr-3 {
margin-right: calc(var(--spacing) * 3);
}
@@ -318,6 +315,10 @@
.table {
display: table;
}
.size-4 {
width: calc(var(--spacing) * 4);
height: calc(var(--spacing) * 4);
}
.size-9 {
width: calc(var(--spacing) * 9);
height: calc(var(--spacing) * 9);
@@ -343,15 +344,27 @@
.h-screen {
height: 100vh;
}
.w-2 {
width: calc(var(--spacing) * 2);
}
.w-3 {
width: calc(var(--spacing) * 3);
}
.w-4 {
width: calc(var(--spacing) * 4);
}
.w-7 {
width: calc(var(--spacing) * 7);
.w-9 {
width: calc(var(--spacing) * 9);
}
.w-40 {
width: calc(var(--spacing) * 40);
}
.w-\[39ch\] {
width: 39ch;
}
.w-fit {
width: fit-content;
}
.w-full {
width: 100%;
}
@@ -379,28 +392,15 @@
.grow {
flex-grow: 1;
}
.caption-bottom {
caption-side: bottom;
}
.border-collapse {
border-collapse: collapse;
}
.origin-left {
transform-origin: left;
}
.-translate-x-1 {
--tw-translate-x: calc(var(--spacing) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.-translate-x-1\/2 {
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.-translate-y-4 {
--tw-translate-y: calc(var(--spacing) * -4);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.translate-y-4 {
--tw-translate-y: calc(var(--spacing) * 4);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.scale-3d {
scale: var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z);
}
@@ -437,6 +437,9 @@
.items-start {
align-items: flex-start;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
@@ -452,17 +455,20 @@
.gap-3 {
gap: calc(var(--spacing) * 3);
}
.gap-6 {
gap: calc(var(--spacing) * 6);
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.overflow-auto {
overflow: auto;
}
.overflow-hidden {
overflow: hidden;
}
.rounded-\[4px\] {
border-radius: 4px;
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
@@ -483,6 +489,14 @@
border-style: var(--tw-border-style);
border-width: 2px;
}
.border-t {
border-top-style: var(--tw-border-style);
border-top-width: 1px;
}
.border-b {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
}
.border-dashed {
--tw-border-style: dashed;
border-style: dashed;
@@ -490,27 +504,42 @@
.border-gray-400 {
border-color: var(--color-gray-400);
}
.border-input {
border-color: var(--input);
}
.border-primary {
border-color: var(--primary);
}
.border-transparent {
border-color: transparent;
}
.bg-background {
background-color: var(--background);
}
.bg-blue-500 {
background-color: var(--color-blue-500);
}
.bg-destructive {
background-color: var(--destructive);
}
.bg-gray-300 {
background-color: var(--color-gray-300);
}
.bg-gray-500 {
background-color: var(--color-gray-500);
.bg-gray-800 {
background-color: var(--color-gray-800);
}
.bg-gray-950 {
background-color: var(--color-gray-950);
}
.bg-green-500 {
background-color: var(--color-green-500);
}
.bg-muted {
background-color: var(--muted);
}
.bg-muted\/50 {
background-color: var(--muted);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--muted) 50%, transparent);
}
}
.bg-popover {
background-color: var(--popover);
}
@@ -526,8 +555,8 @@
.bg-selection {
background-color: var(--selection);
}
.bg-yellow-500 {
background-color: var(--color-yellow-500);
.bg-white {
background-color: var(--color-white);
}
.p-0 {
padding: calc(var(--spacing) * 0);
@@ -541,12 +570,21 @@
.p-4 {
padding: calc(var(--spacing) * 4);
}
.p-5 {
padding: calc(var(--spacing) * 5);
}
.p-7 {
padding: calc(var(--spacing) * 7);
}
.p-8 {
padding: calc(var(--spacing) * 8);
}
.p-10 {
padding: calc(var(--spacing) * 10);
}
.px-2 {
padding-inline: calc(var(--spacing) * 2);
}
.px-3 {
padding-inline: calc(var(--spacing) * 3);
}
@@ -556,6 +594,12 @@
.px-6 {
padding-inline: calc(var(--spacing) * 6);
}
.py-0 {
padding-block: calc(var(--spacing) * 0);
}
.py-0\.5 {
padding-block: calc(var(--spacing) * 0.5);
}
.py-2 {
padding-block: calc(var(--spacing) * 2);
}
@@ -568,12 +612,15 @@
.pl-2 {
padding-left: calc(var(--spacing) * 2);
}
.pl-4 {
padding-left: calc(var(--spacing) * 4);
}
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.align-middle {
vertical-align: middle;
}
.text-2xl {
font-size: var(--text-2xl);
line-height: var(--tw-leading, var(--text-2xl--line-height));
@@ -590,6 +637,10 @@
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
.text-xs {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
.leading-none {
--tw-leading: 1;
line-height: 1;
@@ -611,9 +662,15 @@
.text-destructive {
color: var(--destructive);
}
.text-foreground {
color: var(--foreground);
}
.text-green-500 {
color: var(--color-green-500);
}
.text-muted-foreground {
color: var(--muted-foreground);
}
.text-popover-foreground {
color: var(--popover-foreground);
}
@@ -629,6 +686,9 @@
.text-secondary-foreground {
color: var(--secondary-foreground);
}
.text-white {
color: var(--color-white);
}
.text-yellow-500 {
color: var(--color-yellow-500);
}
@@ -670,11 +730,26 @@
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-\[color\,box-shadow\] {
transition-property: color,box-shadow;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-all {
transition-property: all;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-shadow {
transition-property: box-shadow;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-transform {
transition-property: transform, translate, scale, rotate;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -688,14 +763,15 @@
--tw-ease: linear;
transition-timing-function: linear;
}
.ease-out {
--tw-ease: var(--ease-out);
transition-timing-function: var(--ease-out);
}
.outline-none {
--tw-outline-style: none;
outline-style: none;
}
.peer-checked\:opacity-100 {
&:is(:where(.peer):checked ~ *) {
opacity: 100%;
}
}
.before\:absolute {
&::before {
content: var(--tw-content);
@@ -762,6 +838,11 @@
background-color: var(--primary);
}
}
.checked\:text-primary-foreground {
&:checked {
color: var(--primary-foreground);
}
}
.checked\:before\:visible {
&:checked {
&::before {
@@ -794,6 +875,16 @@
}
}
}
.hover\:bg-muted\/50 {
&:hover {
@media (hover: hover) {
background-color: var(--muted);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--muted) 50%, transparent);
}
}
}
}
.hover\:bg-primary\/90 {
&:hover {
@media (hover: hover) {
@@ -894,6 +985,12 @@
}
}
}
.focus-visible\:outline-none {
&:focus-visible {
--tw-outline-style: none;
outline-style: none;
}
}
.disabled\:pointer-events-none {
&:disabled {
pointer-events: none;
@@ -1009,6 +1106,11 @@
right: calc(var(--spacing) * 0);
}
}
.data-\[tui-table-state-selected\]\:bg-muted {
&[data-tui-table-state-selected] {
background-color: var(--muted);
}
}
.data-\[variant\=default\]\:bg-gray-500 {
&[data-variant="default"] {
background-color: var(--color-gray-500);
@@ -1034,6 +1136,16 @@
background-color: var(--color-yellow-500);
}
}
.sm\:flex {
@media (width >= 40rem) {
display: flex;
}
}
.md\:w-3\/4 {
@media (width >= 48rem) {
width: calc(3/4 * 100%);
}
}
.md\:max-w-\[420px\] {
@media (width >= 48rem) {
max-width: 420px;
@@ -1060,6 +1172,11 @@
}
}
}
.dark\:text-white {
&:where(.dark, .dark *) {
color: var(--color-white);
}
}
.dark\:hover\:bg-accent\/50 {
&:where(.dark, .dark *) {
&:hover {
@@ -1120,6 +1237,102 @@
height: calc(var(--spacing) * 4);
}
}
.\[\&_tr\]\:border-b {
& tr {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
}
}
.\[\&_tr\:last-child\]\:border-0 {
& tr:last-child {
border-style: var(--tw-border-style);
border-width: 0px;
}
}
.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0 {
&:has([role=checkbox]) {
padding-right: calc(var(--spacing) * 0);
}
}
.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\] {
&>[role=checkbox] {
--tw-translate-y: 2px;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
.\[\&\>svg\]\:pointer-events-none {
&>svg {
pointer-events: none;
}
}
.\[\&\>svg\]\:size-3 {
&>svg {
width: calc(var(--spacing) * 3);
height: calc(var(--spacing) * 3);
}
}
.\[\&\>tr\]\:last\:border-b-0 {
&>tr {
&:last-child {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 0px;
}
}
}
.\[a\&\]\:hover\:bg-accent {
a& {
&:hover {
@media (hover: hover) {
background-color: var(--accent);
}
}
}
}
.\[a\&\]\:hover\:bg-destructive\/90 {
a& {
&:hover {
@media (hover: hover) {
background-color: var(--destructive);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--destructive) 90%, transparent);
}
}
}
}
}
.\[a\&\]\:hover\:bg-primary\/90 {
a& {
&:hover {
@media (hover: hover) {
background-color: var(--primary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--primary) 90%, transparent);
}
}
}
}
}
.\[a\&\]\:hover\:bg-secondary\/90 {
a& {
&:hover {
@media (hover: hover) {
background-color: var(--secondary);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--secondary) 90%, transparent);
}
}
}
}
}
.\[a\&\]\:hover\:text-accent-foreground {
a& {
&:hover {
@media (hover: hover) {
color: var(--accent-foreground);
}
}
}
}
}
:root {
--radius: 0.65rem;
@@ -1207,21 +1420,6 @@
font-feature-settings: "rlig" 1, "calt" 1;
}
}
@property --tw-translate-x {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-y {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-z {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-scale-x {
syntax: "*";
inherits: false;
@@ -1353,12 +1551,24 @@
initial-value: "";
inherits: false;
}
@property --tw-translate-x {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-y {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-z {
syntax: "*";
inherits: false;
initial-value: 0;
}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-scale-z: 1;
@@ -1388,6 +1598,9 @@
--tw-duration: initial;
--tw-ease: initial;
--tw-content: "";
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
}
}
}