A very performant and light (2mb in memory) link shortener and tracker. Written in Rust and React and uses Postgres/SQLite.
1@import "tailwindcss"; 2 3@variant dark (&:where(.dark, .dark *)); 4 5@plugin "tailwindcss-animate"; 6 7@theme inline { 8 --color-background: var(--background); 9 --color-foreground: var(--foreground); 10 --color-card: var(--card); 11 --color-card-foreground: var(--card-foreground); 12 --color-popover: var(--popover); 13 --color-popover-foreground: var(--popover-foreground); 14 --color-primary: var(--primary); 15 --color-primary-foreground: var(--primary-foreground); 16 --color-secondary: var(--secondary); 17 --color-secondary-foreground: var(--secondary-foreground); 18 --color-muted: var(--muted); 19 --color-muted-foreground: var(--muted-foreground); 20 --color-accent: var(--accent); 21 --color-accent-foreground: var(--accent-foreground); 22 --color-destructive: var(--destructive); 23 --color-destructive-foreground: var(--destructive-foreground); 24 --color-border: var(--border); 25 --color-input: var(--input); 26 --color-ring: var(--ring); 27 --color-chart-1: var(--chart-1); 28 --color-chart-2: var(--chart-2); 29 --color-chart-3: var(--chart-3); 30 --color-chart-4: var(--chart-4); 31 --color-chart-5: var(--chart-5); 32 --radius-lg: var(--radius); 33 --radius-md: calc(var(--radius) - 2px); 34 --radius-sm: calc(var(--radius) - 4px); 35} 36 37/* Default theme */ 38:root { 39 --background: var(--color-white); 40 --foreground: var(--color-slate-900); 41 --card: var(--color-white); 42 --card-foreground: var(--color-slate-900); 43 --popover: var(--color-white); 44 --popover-foreground: var(--color-slate-900); 45 --primary: var(--color-slate-900); 46 --primary-foreground: var(--color-slate-50); 47 --secondary: var(--color-slate-100); 48 --secondary-foreground: var(--color-slate-900); 49 --muted: var(--color-slate-100); 50 --muted-foreground: var(--color-slate-500); 51 --accent: var(--color-slate-100); 52 --accent-foreground: var(--color-slate-900); 53 --destructive: var(--color-rose-500); 54 --destructive-foreground: var(--color-slate-50); 55 --border: var(--color-slate-200); 56 --input: var(--color-slate-200); 57 --ring: var(--color-slate-400); 58 --chart-1: hsl(12 76% 61%); 59 --chart-2: hsl(173 58% 39%); 60 --chart-3: hsl(197 37% 24%); 61 --chart-4: hsl(43 74% 66%); 62 --chart-5: hsl(27 87% 67%); 63 --radius: 0.5rem; 64} 65 66.dark { 67 --background: var(--color-zinc-950); 68 --foreground: var(--color-zinc-50); 69 --card: var(--color-zinc-950); 70 --card-foreground: var(--color-zinc-50); 71 --popover: var(--color-zinc-950); 72 --popover-foreground: var(--color-zinc-50); 73 --primary: var(--color-zinc-50); 74 --primary-foreground: var(--color-zinc-900); 75 --secondary: var(--color-zinc-800); 76 --secondary-foreground: var(--color-zinc-50); 77 --muted: var(--color-zinc-800); 78 --muted-foreground: var(--color-zinc-400); 79 --accent: var(--color-zinc-800); 80 --accent-foreground: var(--color-zinc-50); 81 --destructive: var(--color-rose-700); 82 --destructive-foreground: var(--color-zinc-50); 83 --border: var(--color-zinc-800); 84 --input: var(--color-zinc-800); 85 --ring: var(--color-zinc-300); 86 --chart-1: hsl(220 70% 50%); 87 --chart-2: hsl(160 60% 45%); 88 --chart-3: hsl(30 80% 55%); 89 --chart-4: hsl(280 65% 60%); 90 --chart-5: hsl(340 75% 55%); 91} 92 93[data-theme="example"] { 94 --background: var(--color-blue-50); 95 --foreground: var(--color-gray-900); 96 --card: var(--color-blue-100); 97 --card-foreground: var(--color-gray-800); 98 --popover: var(--color-blue-50); 99 --popover-foreground: var(--color-gray-800); 100 --primary: var(--color-blue-100); 101 --primary-foreground: var(--color-gray-900); 102 --secondary: var(--color-blue-400); 103 --secondary-foreground: var(--color-gray-800); 104 --muted: var(--color-emerald-100); 105 --muted-foreground: var(--color-gray-600); 106 --accent: var(--color-emerald-200); 107 --accent-foreground: var(--color-gray-800); 108 --destructive: var(--color-red-700); 109 --destructive-foreground: var(--color-gray-200); 110 --border: var(--color-blue-600); 111 --input: var(--color-blue-800); 112 --ring: var(--color-blue-100); 113 --radius: 0.3rem; 114} 115 116.dark [data-theme="example"], 117.dark[data-theme="example"] { 118 --background: var(--color-gray-900); 119 --foreground: var(--color-gray-200); 120 --card: var(--color-gray-900); 121 --card-foreground: var(--color-gray-200); 122 --popover: var(--color-gray-950); 123 --popover-foreground: var(--color-gray-200); 124 --primary: var(--color-blue-500); 125 --primary-foreground: var(--color-blue-50); 126 --secondary: var(--color-blue-800); 127 --secondary-foreground: var(--color-blue-50); 128 --muted: var(--color-emerald-900); 129 --muted-foreground: var(--color-gray-500); 130 --accent: var(--color-emerald-900); 131 --accent-foreground: var(--color-gray-200); 132 --destructive: var(--color-red-700); 133 --destructive-foreground: var(--color-gray-200); 134 --border: var(--color-blue-800); 135 --input: var(--color-blue-800); 136 --ring: var(--color-blue-100); 137 --radius: 0.3rem; 138} 139 140html, 141body { 142 background-color: var(--background); 143 color: var(--foreground); 144} 145 146body * { 147 border-color: var(--border); 148} 149 150/* Animation utilities */ 151@keyframes enter { 152 from { 153 opacity: var(--tw-enter-opacity, 1); 154 transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0)); 155 } 156} 157 158@keyframes exit { 159 to { 160 opacity: var(--tw-exit-opacity, 1); 161 transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0)); 162 } 163}