diff --git a/website/landing/css/style.css b/website/landing/css/style.css index 993483f2..aa3e2ab5 100644 --- a/website/landing/css/style.css +++ b/website/landing/css/style.css @@ -1,4 +1,4 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Inter+Tight:ital,wght@0,500;0,600;0,700;1,700&display=fallback'); +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Inter+Tight:ital,wght@0,500;0,600;0,700;1,700&family=Caveat:wght@600&display=fallback'); @import 'tailwindcss/base'; @import 'tailwindcss/components'; @@ -13,3 +13,47 @@ [x-cloak=""] { display: none; } + +/* Smooth in-page anchor scrolling, disabled for users who prefer reduced motion. */ +html { + scroll-behavior: smooth; +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } +} + +.text-balance { + text-wrap: balance; +} +/* Handwritten margin notes. */ +.hw-note { + font-family: 'Caveat', cursive; + font-weight: 600; + font-size: 1.5rem; + line-height: 1.2; +} + +/* A hand-swiped stroke with uneven rounded edges. */ +.marker-red { + position: relative; + white-space: nowrap; + color: #fff; + isolation: isolate; +} + +.marker-red::before { + content: ""; + position: absolute; + z-index: -1; + inset: 0.08em -0.18em -0.02em -0.14em; + background: linear-gradient(100deg, + rgba(220, 38, 38, 0.82) 0%, + rgba(239, 68, 68, 0.95) 28%, + rgba(225, 29, 72, 0.9) 72%, + rgba(220, 38, 38, 0.88) 100%); + border-radius: 0.3em 0.5em 0.4em 0.6em; + transform: skew(-10deg) rotate(-0.5deg); +} diff --git a/website/landing/hub.html b/website/landing/hub.html index 60ea0337..5e5ef591 100644 --- a/website/landing/hub.html +++ b/website/landing/hub.html @@ -32,64 +32,6 @@ content="Uncloud Hub will add a dashboard, metrics, logs, and alerts to the Uncloud clusters you already run. Skip the weekend of wiring Prometheus, Loki, and Grafana. Join the early access list."> -
@@ -174,12 +116,9 @@Coming soon
@@ -215,7 +154,8 @@- that's what Hub is for -
+
Explore your cluster, services, metrics, and logs in one place. See how each deploy - behaves in production, and let alerts find you when something needs attention. + behaves in production, and receive alerts when something needs attention.
No. Uncloud is open source @@ -757,17 +692,15 @@
No, and no point pretending otherwise. Uncloud, the orchestrator, is Apache 2.0. Hub @@ -776,17 +709,15 @@
Metrics and logs will flow to Hub. Storing, graphing, and searching them is the @@ -797,17 +728,15 @@
The connection model is being designed right now with early access users. The intent @@ -818,17 +747,15 @@
Nothing. Your apps run on your servers and Uncloud doesn't depend on Hub to @@ -836,17 +763,15 @@
You can and if you do already, keep it. Grafana, Prometheus, VictoriaMetrics and @@ -855,17 +780,15 @@
Hub is in active development and everything on this page is a design preview. diff --git a/website/landing/images/hub-hero.webp b/website/landing/images/hub-hero.webp new file mode 100644 index 00000000..8bbf2a10 Binary files /dev/null and b/website/landing/images/hub-hero.webp differ diff --git a/website/landing/images/hub-overview.webp b/website/landing/images/hub-overview.webp new file mode 100644 index 00000000..3fbc5261 Binary files /dev/null and b/website/landing/images/hub-overview.webp differ diff --git a/website/landing/index.html b/website/landing/index.html index f4446714..615b9e04 100644 --- a/website/landing/index.html +++ b/website/landing/index.html @@ -33,15 +33,7 @@ @@ -67,6 +59,15 @@
+ A hosted dashboard and observability stack for your Uncloud clusters. Connect a + cluster and get metrics, logs, and alerts for every service and machine, without + building and monitoring the monitoring yourself. +
+ +
+ Hub is how we plan to fund Uncloud's full-time development.
+ Uncloud itself stays Apache 2.0 and works fully without Hub.
+
+ +
Swarm needs a Raft quorum of manager nodes and has been in maintenance mode for years. Uncloud has no control plane at all. Machines sync state peer to peer, and any subset keeps working. You also get WireGuard networking across clouds and even @@ -750,17 +792,17 @@ prod-3 201.45.91.123:51820 1m56s ago 11ms 5.12MB 9.34MB
+
The rest of the cluster keeps working. There's no control plane to lose, and healthy replicas on other machines keep serving traffic. Uncloud deliberately doesn't auto-reschedule containers. You decide when to replace the machine and @@ -768,17 +810,17 @@ prod-3 201.45.91.123:51820 1m56s ago 11ms 5.12MB 9.34MB
+
No, and that's deliberate. uc
is just a CLI that connects to your cluster over SSH. Run uc deploy
locally or in GitHub Actions to integrate with existing workflows.
diff --git a/website/landing/style.css b/website/landing/style.css
index 130e0602..e42fbe63 100644
--- a/website/landing/style.css
+++ b/website/landing/style.css
@@ -1,4 +1,4 @@
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Inter+Tight:ital,wght@0,500;0,600;0,700;1,700&display=fallback');
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Inter+Tight:ital,wght@0,500;0,600;0,700;1,700&family=Caveat:wght@600&display=fallback');
/*
! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com
@@ -1187,20 +1187,40 @@ input[type="search"]::-webkit-search-results-decoration {
inset: 0px;
}
+.-top-9{
+ top: -2.25rem;
+}
+
+.bottom-1{
+ bottom: 0.25rem;
+}
+
.left-1\/2{
left: 50%;
}
+.left-16{
+ left: 4rem;
+}
+
.top-0{
top: 0px;
}
+.top-1\/2{
+ top: 50%;
+}
+
.top-2{
top: 0.5rem;
}
-.-z-10{
- z-index: -10;
+.isolate{
+ isolation: isolate;
+}
+
+.z-10{
+ z-index: 10;
}
.z-30{
@@ -1220,14 +1240,26 @@ input[type="search"]::-webkit-search-results-decoration {
margin-bottom: 0.25rem;
}
+.mb-1\.5{
+ margin-bottom: 0.375rem;
+}
+
.mb-2{
margin-bottom: 0.5rem;
}
+.mb-3{
+ margin-bottom: 0.75rem;
+}
+
.mb-4{
margin-bottom: 1rem;
}
+.mb-5{
+ margin-bottom: 1.25rem;
+}
+
.mb-6{
margin-bottom: 1.5rem;
}
@@ -1244,12 +1276,12 @@ input[type="search"]::-webkit-search-results-decoration {
margin-left: 0.5rem;
}
-.mr-2{
- margin-right: 0.5rem;
+.ml-\[6rem\]{
+ margin-left: 6rem;
}
-.mr-3{
- margin-right: 0.75rem;
+.mr-2{
+ margin-right: 0.5rem;
}
.mr-4{
@@ -1288,6 +1320,10 @@ input[type="search"]::-webkit-search-results-decoration {
margin-top: 1rem;
}
+.mt-5{
+ margin-top: 1.25rem;
+}
+
.mt-6{
margin-top: 1.5rem;
}
@@ -1300,6 +1336,10 @@ input[type="search"]::-webkit-search-results-decoration {
display: block;
}
+.inline-block{
+ display: inline-block;
+}
+
.inline{
display: inline;
}
@@ -1320,6 +1360,14 @@ input[type="search"]::-webkit-search-results-decoration {
display: none;
}
+.h-10{
+ height: 2.5rem;
+}
+
+.h-11{
+ height: 2.75rem;
+}
+
.h-14{
height: 3.5rem;
}
@@ -1328,10 +1376,6 @@ input[type="search"]::-webkit-search-results-decoration {
height: 0.5rem;
}
-.h-2\.5{
- height: 0.625rem;
-}
-
.h-24{
height: 6rem;
}
@@ -1360,6 +1404,18 @@ input[type="search"]::-webkit-search-results-decoration {
min-height: 100vh;
}
+.w-10{
+ width: 2.5rem;
+}
+
+.w-11{
+ width: 2.75rem;
+}
+
+.w-12{
+ width: 3rem;
+}
+
.w-14{
width: 3.5rem;
}
@@ -1368,10 +1424,6 @@ input[type="search"]::-webkit-search-results-decoration {
width: 0.5rem;
}
-.w-2\.5{
- width: 0.625rem;
-}
-
.w-3{
width: 0.75rem;
}
@@ -1384,6 +1436,10 @@ input[type="search"]::-webkit-search-results-decoration {
width: 1.25rem;
}
+.w-7{
+ width: 1.75rem;
+}
+
.w-8{
width: 2rem;
}
@@ -1392,10 +1448,6 @@ input[type="search"]::-webkit-search-results-decoration {
width: 36rem;
}
-.w-\[calc\(100\%\+1rem\)\]{
- width: calc(100% + 1rem);
-}
-
.w-full{
width: 100%;
}
@@ -1404,6 +1456,10 @@ input[type="search"]::-webkit-search-results-decoration {
min-width: 0px;
}
+.max-w-2xl{
+ max-width: 42rem;
+}
+
.max-w-3xl{
max-width: 48rem;
}
@@ -1416,6 +1472,10 @@ input[type="search"]::-webkit-search-results-decoration {
max-width: 72rem;
}
+.max-w-lg{
+ max-width: 32rem;
+}
+
.max-w-md{
max-width: 28rem;
}
@@ -1449,11 +1509,46 @@ input[type="search"]::-webkit-search-results-decoration {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
+.-translate-y-1{
+ --tw-translate-y: -0.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\.5{
+ --tw-translate-y: -0.375rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\/2{
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
.-translate-y-1\/3{
--tw-translate-y: -33.333333%;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
+.translate-y-4{
+ --tw-translate-y: 1rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-2{
+ --tw-rotate: -2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-3{
+ --tw-rotate: -3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-\[8deg\]{
+ --tw-rotate: -8deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
.transform{
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
@@ -1467,6 +1562,10 @@ input[type="search"]::-webkit-search-results-decoration {
user-select: none;
}
+.resize-none{
+ resize: none;
+}
+
.list-none{
list-style-type: none;
}
@@ -1483,12 +1582,12 @@ input[type="search"]::-webkit-search-results-decoration {
flex-direction: column;
}
-.items-start{
- align-items: flex-start;
+.flex-wrap{
+ flex-wrap: wrap;
}
-.items-end{
- align-items: flex-end;
+.items-start{
+ align-items: flex-start;
}
.items-center{
@@ -1531,10 +1630,18 @@ input[type="search"]::-webkit-search-results-decoration {
gap: 0.75rem;
}
+.gap-3\.5{
+ gap: 0.875rem;
+}
+
.gap-4{
gap: 1rem;
}
+.gap-5{
+ gap: 1.25rem;
+}
+
.gap-6{
gap: 1.5rem;
}
@@ -1543,10 +1650,12 @@ input[type="search"]::-webkit-search-results-decoration {
gap: 2rem;
}
-.space-x-3 > :not([hidden]) ~ :not([hidden]){
- --tw-space-x-reverse: 0;
- margin-right: calc(0.75rem * var(--tw-space-x-reverse));
- margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
+.gap-x-6{
+ column-gap: 1.5rem;
+}
+
+.gap-y-4{
+ row-gap: 1rem;
}
.space-x-4 > :not([hidden]) ~ :not([hidden]){
@@ -1555,12 +1664,6 @@ input[type="search"]::-webkit-search-results-decoration {
margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
-.space-y-12 > :not([hidden]) ~ :not([hidden]){
- --tw-space-y-reverse: 0;
- margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(3rem * var(--tw-space-y-reverse));
-}
-
.space-y-16 > :not([hidden]) ~ :not([hidden]){
--tw-space-y-reverse: 0;
margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));
@@ -1604,10 +1707,18 @@ input[type="search"]::-webkit-search-results-decoration {
overflow-x: auto;
}
+.whitespace-nowrap{
+ white-space: nowrap;
+}
+
.rounded{
border-radius: 0.25rem;
}
+.rounded-2xl{
+ border-radius: 1rem;
+}
+
.rounded-full{
border-radius: 9999px;
}
@@ -1636,11 +1747,19 @@ input[type="search"]::-webkit-search-results-decoration {
border-width: 2px;
}
+.border-\[1\.5px\]{
+ border-width: 1.5px;
+}
+
.border-y{
border-top-width: 1px;
border-bottom-width: 1px;
}
+.border-b{
+ border-bottom-width: 1px;
+}
+
.border-b-2{
border-bottom-width: 2px;
}
@@ -1653,6 +1772,10 @@ input[type="search"]::-webkit-search-results-decoration {
border-top-width: 1px;
}
+.border-dashed{
+ border-style: dashed;
+}
+
.border-gray-200{
--tw-border-opacity: 1;
border-color: rgb(229 231 235 / var(--tw-border-opacity));
@@ -1663,10 +1786,24 @@ input[type="search"]::-webkit-search-results-decoration {
border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
+.border-red-500\/30{
+ border-color: rgb(239 68 68 / 0.3);
+}
+
.border-transparent{
border-color: transparent;
}
+.border-violet-100{
+ --tw-border-opacity: 1;
+ border-color: rgb(237 233 254 / var(--tw-border-opacity));
+}
+
+.border-violet-300{
+ --tw-border-opacity: 1;
+ border-color: rgb(196 181 253 / var(--tw-border-opacity));
+}
+
.border-zinc-200{
--tw-border-opacity: 1;
border-color: rgb(228 228 231 / var(--tw-border-opacity));
@@ -1682,8 +1819,13 @@ input[type="search"]::-webkit-search-results-decoration {
border-color: rgb(82 82 91 / var(--tw-border-opacity));
}
-.border-zinc-700\/50{
- border-color: rgb(63 63 70 / 0.5);
+.border-zinc-700{
+ --tw-border-opacity: 1;
+ border-color: rgb(63 63 70 / var(--tw-border-opacity));
+}
+
+.border-zinc-700\/60{
+ border-color: rgb(63 63 70 / 0.6);
}
.border-zinc-800{
@@ -1691,6 +1833,11 @@ input[type="search"]::-webkit-search-results-decoration {
border-color: rgb(39 39 42 / var(--tw-border-opacity));
}
+.bg-\[\#200f11\]{
+ --tw-bg-opacity: 1;
+ background-color: rgb(32 15 17 / var(--tw-bg-opacity));
+}
+
.bg-\[\#5bbf6a\]{
--tw-bg-opacity: 1;
background-color: rgb(91 191 106 / var(--tw-bg-opacity));
@@ -1716,14 +1863,27 @@ input[type="search"]::-webkit-search-results-decoration {
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
}
-.bg-green-500{
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
+.bg-red-500\/5{
+ background-color: rgb(239 68 68 / 0.05);
}
-.bg-red-500{
+.bg-violet-100{
--tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ background-color: rgb(237 233 254 / var(--tw-bg-opacity));
+}
+
+.bg-violet-50{
+ --tw-bg-opacity: 1;
+ background-color: rgb(245 243 255 / var(--tw-bg-opacity));
+}
+
+.bg-violet-50\/60{
+ background-color: rgb(245 243 255 / 0.6);
+}
+
+.bg-violet-600{
+ --tw-bg-opacity: 1;
+ background-color: rgb(124 58 237 / var(--tw-bg-opacity));
}
.bg-white{
@@ -1731,11 +1891,6 @@ input[type="search"]::-webkit-search-results-decoration {
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
-.bg-yellow-500{
- --tw-bg-opacity: 1;
- background-color: rgb(234 179 8 / var(--tw-bg-opacity));
-}
-
.bg-zinc-100{
--tw-bg-opacity: 1;
background-color: rgb(244 244 245 / var(--tw-bg-opacity));
@@ -1798,26 +1953,14 @@ input[type="search"]::-webkit-search-results-decoration {
fill: currentColor;
}
-.fill-zinc-300{
- fill: #d4d4d8;
-}
-
-.fill-zinc-400{
- fill: #a1a1aa;
-}
-
-.stroke-zinc-400{
- stroke: #a1a1aa;
-}
-
-.p-4{
- padding: 1rem;
-}
-
.p-5{
padding: 1.25rem;
}
+.p-6{
+ padding: 1.5rem;
+}
+
.px-0{
padding-left: 0px;
padding-right: 0px;
@@ -1833,16 +1976,31 @@ input[type="search"]::-webkit-search-results-decoration {
padding-right: 0.25rem;
}
+.px-1\.5{
+ padding-left: 0.375rem;
+ padding-right: 0.375rem;
+}
+
.px-2{
padding-left: 0.5rem;
padding-right: 0.5rem;
}
+.px-3{
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+
.px-4{
padding-left: 1rem;
padding-right: 1rem;
}
+.px-5{
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+}
+
.px-6{
padding-left: 1.5rem;
padding-right: 1.5rem;
@@ -1858,6 +2016,11 @@ input[type="search"]::-webkit-search-results-decoration {
padding-bottom: 0.125rem;
}
+.py-1{
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+}
+
.py-12{
padding-top: 3rem;
padding-bottom: 3rem;
@@ -1883,21 +2046,25 @@ input[type="search"]::-webkit-search-results-decoration {
padding-bottom: 0.875rem;
}
-.py-4{
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-
.py-5{
padding-top: 1.25rem;
padding-bottom: 1.25rem;
}
+.py-6{
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+}
+
.py-8{
padding-top: 2rem;
padding-bottom: 2rem;
}
+.pb-10{
+ padding-bottom: 2.5rem;
+}
+
.pb-12{
padding-bottom: 3rem;
}
@@ -1906,12 +2073,16 @@ input[type="search"]::-webkit-search-results-decoration {
padding-bottom: 1rem;
}
-.pb-8{
- padding-bottom: 2rem;
+.pb-5{
+ padding-bottom: 1.25rem;
}
-.pl-4{
- padding-left: 1rem;
+.pb-6{
+ padding-bottom: 1.5rem;
+}
+
+.pb-8{
+ padding-bottom: 2rem;
}
.pl-5{
@@ -1922,12 +2093,8 @@ input[type="search"]::-webkit-search-results-decoration {
padding-top: 8rem;
}
-.pt-4{
- padding-top: 1rem;
-}
-
-.pt-6{
- padding-top: 1.5rem;
+.pt-8{
+ padding-top: 2rem;
}
.text-left{
@@ -1974,6 +2141,14 @@ input[type="search"]::-webkit-search-results-decoration {
letter-spacing: -0.017em;
}
+.text-\[10px\]{
+ font-size: 10px;
+}
+
+.text-\[11px\]{
+ font-size: 11px;
+}
+
.text-\[13px\]{
font-size: 13px;
}
@@ -2004,6 +2179,10 @@ input[type="search"]::-webkit-search-results-decoration {
font-weight: 700;
}
+.font-extrabold{
+ font-weight: 800;
+}
+
.font-medium{
font-weight: 500;
}
@@ -2045,10 +2224,22 @@ input[type="search"]::-webkit-search-results-decoration {
letter-spacing: 0.18em;
}
+.tracking-\[0\.25em\]{
+ letter-spacing: 0.25em;
+}
+
.tracking-tight{
letter-spacing: -0.025em;
}
+.tracking-wide{
+ letter-spacing: 0.025em;
+}
+
+.tracking-widest{
+ letter-spacing: 0.1em;
+}
+
.text-black{
--tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity));
@@ -2059,11 +2250,6 @@ input[type="search"]::-webkit-search-results-decoration {
color: rgb(59 130 246 / var(--tw-text-opacity));
}
-.text-emerald-500{
- --tw-text-opacity: 1;
- color: rgb(16 185 129 / var(--tw-text-opacity));
-}
-
.text-gray-500{
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
@@ -2099,6 +2285,11 @@ input[type="search"]::-webkit-search-results-decoration {
color: rgb(79 70 229 / var(--tw-text-opacity));
}
+.text-red-400{
+ --tw-text-opacity: 1;
+ color: rgb(248 113 113 / var(--tw-text-opacity));
+}
+
.text-red-500{
--tw-text-opacity: 1;
color: rgb(239 68 68 / var(--tw-text-opacity));
@@ -2113,6 +2304,16 @@ input[type="search"]::-webkit-search-results-decoration {
color: transparent;
}
+.text-violet-600{
+ --tw-text-opacity: 1;
+ color: rgb(124 58 237 / var(--tw-text-opacity));
+}
+
+.text-violet-700{
+ --tw-text-opacity: 1;
+ color: rgb(109 40 217 / var(--tw-text-opacity));
+}
+
.text-white{
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
@@ -2229,6 +2430,17 @@ input[type="search"]::-webkit-search-results-decoration {
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
+.shadow-xl{
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-zinc-950\/10{
+ --tw-shadow-color: rgb(9 9 11 / 0.1);
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
.shadow-zinc-950\/20{
--tw-shadow-color: rgb(9 9 11 / 0.2);
--tw-shadow: var(--tw-shadow-colored);
@@ -2239,11 +2451,6 @@ input[type="search"]::-webkit-search-results-decoration {
--tw-shadow: var(--tw-shadow-colored);
}
-.blur{
- --tw-blur: blur(8px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-
.blur-3xl{
--tw-blur: blur(64px);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
@@ -2277,20 +2484,37 @@ input[type="search"]::-webkit-search-results-decoration {
transition-duration: 200ms;
}
-.\[background\:linear-gradient\(theme\(colors\.white\)\2c theme\(colors\.zinc\.50\)\)_padding-box\2c linear-gradient\(120deg\2c theme\(colors\.zinc\.300\)\2c theme\(colors\.zinc\.100\)\2c theme\(colors\.zinc\.300\)\)_border-box\]{
- background: linear-gradient(#fff,#fafafa) padding-box,linear-gradient(120deg,#d4d4d8,#f4f4f5,#d4d4d8) border-box;
-}
-
-.\[background\:linear-gradient\(theme\(colors\.zinc\.800\)\2c theme\(colors\.zinc\.800\)\)_padding-box\2c linear-gradient\(120deg\2c theme\(colors\.zinc\.700\)\2c theme\(colors\.zinc\.700\/0\)\2c theme\(colors\.zinc\.700\)\)_border-box\]{
- background: linear-gradient(#27272a,#27272a) padding-box,linear-gradient(120deg,#3f3f46,rgb(63 63 70 / 0),#3f3f46) border-box;
-}
-
/* See Alpine.js: https://github.com/alpinejs/alpine#x-cloak */
[x-cloak=""] {
display: none;
}
+/* Smooth in-page anchor scrolling, disabled for users who prefer reduced motion. */
+
+html {
+ scroll-behavior: smooth;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ html {
+ scroll-behavior: auto;
+ }
+}
+
+.text-balance {
+ text-wrap: balance;
+}
+
+/* Handwritten margin notes. */
+
+.hw-note {
+ font-family: 'Caveat', cursive;
+ font-weight: 600;
+ font-size: 1.5rem;
+ line-height: 1.2;
+}
+
.before\:pointer-events-none::before{
content: var(--tw-content);
pointer-events: none;
@@ -2347,6 +2571,12 @@ input[type="search"]::-webkit-search-results-decoration {
border-radius: 9999px;
}
+.before\:bg-violet-700::before{
+ content: var(--tw-content);
+ --tw-bg-opacity: 1;
+ background-color: rgb(109 40 217 / var(--tw-bg-opacity));
+}
+
.before\:bg-zinc-900::before{
content: var(--tw-content);
--tw-bg-opacity: 1;
@@ -2376,11 +2606,6 @@ input[type="search"]::-webkit-search-results-decoration {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
-.after\:pointer-events-none::after{
- content: var(--tw-content);
- pointer-events: none;
-}
-
.after\:absolute::after{
content: var(--tw-content);
position: absolute;
@@ -2391,11 +2616,6 @@ input[type="search"]::-webkit-search-results-decoration {
right: 0px;
}
-.after\:top-0::after{
- content: var(--tw-content);
- top: 0px;
-}
-
.after\:top-1\/2::after{
content: var(--tw-content);
top: 50%;
@@ -2411,16 +2631,6 @@ input[type="search"]::-webkit-search-results-decoration {
height: 2rem;
}
-.after\:h-full::after{
- content: var(--tw-content);
- height: 100%;
-}
-
-.after\:w-96::after{
- content: var(--tw-content);
- width: 24rem;
-}
-
.after\:w-px::after{
content: var(--tw-content);
width: 1px;
@@ -2448,28 +2658,30 @@ input[type="search"]::-webkit-search-results-decoration {
border-color: rgb(212 212 216 / var(--tw-border-opacity));
}
-.after\:bg-gradient-to-l::after{
- content: var(--tw-content);
- background-image: linear-gradient(to left, var(--tw-gradient-stops));
-}
-
-.after\:from-zinc-800::after{
- content: var(--tw-content);
- --tw-gradient-from: #27272a var(--tw-gradient-from-position);
- --tw-gradient-to: rgb(39 39 42 / 0) var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-
.last\:after\:hidden:last-child::after{
content: var(--tw-content);
display: none;
}
+.hover\:border-violet-600:hover{
+ --tw-border-opacity: 1;
+ border-color: rgb(124 58 237 / var(--tw-border-opacity));
+}
+
+.hover\:bg-violet-100\/60:hover{
+ background-color: rgb(237 233 254 / 0.6);
+}
+
.hover\:bg-white:hover{
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
+.hover\:bg-zinc-100:hover{
+ --tw-bg-opacity: 1;
+ background-color: rgb(244 244 245 / var(--tw-bg-opacity));
+}
+
.hover\:bg-zinc-700:hover{
--tw-bg-opacity: 1;
background-color: rgb(63 63 70 / var(--tw-bg-opacity));
@@ -2480,6 +2692,16 @@ input[type="search"]::-webkit-search-results-decoration {
background-color: rgb(39 39 42 / var(--tw-bg-opacity));
}
+.hover\:text-violet-900:hover{
+ --tw-text-opacity: 1;
+ color: rgb(76 29 149 / var(--tw-text-opacity));
+}
+
+.hover\:text-white:hover{
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
.hover\:text-zinc-100:hover{
--tw-text-opacity: 1;
color: rgb(244 244 245 / var(--tw-text-opacity));
@@ -2490,10 +2712,6 @@ input[type="search"]::-webkit-search-results-decoration {
color: rgb(24 24 27 / var(--tw-text-opacity));
}
-.hover\:underline:hover{
- text-decoration-line: underline;
-}
-
.hover\:decoration-zinc-100:hover{
text-decoration-color: #f4f4f5;
}
@@ -2611,17 +2829,14 @@ input[type="search"]::-webkit-search-results-decoration {
}
}
-@media not all and (min-width: 1024px){
- .max-lg\:after\:hidden::after{
- content: var(--tw-content);
- display: none;
- }
-}
-
@media not all and (min-width: 768px){
.max-md\:order-1{
order: 1;
}
+
+ .max-md\:hidden{
+ display: none;
+ }
}
@media (min-width: 640px){
@@ -2657,8 +2872,8 @@ input[type="search"]::-webkit-search-results-decoration {
justify-content: center;
}
- .sm\:gap-4{
- gap: 1rem;
+ .sm\:gap-12{
+ gap: 3rem;
}
.sm\:space-x-4 > :not([hidden]) ~ :not([hidden]){
@@ -2673,10 +2888,6 @@ input[type="search"]::-webkit-search-results-decoration {
margin-bottom: calc(0px * var(--tw-space-y-reverse));
}
- .sm\:p-6{
- padding: 1.5rem;
- }
-
.sm\:px-5{
padding-left: 1.25rem;
padding-right: 1.25rem;
@@ -2687,15 +2898,16 @@ input[type="search"]::-webkit-search-results-decoration {
padding-right: 1.5rem;
}
+ .sm\:px-8{
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+
.sm\:text-3xl{
font-size: 2rem;
line-height: 1.3125;
letter-spacing: -0.017em;
}
-
- .sm\:text-\[0\.9375rem\]{
- font-size: 0.9375rem;
- }
}
@media (min-width: 768px){
@@ -2703,6 +2915,10 @@ input[type="search"]::-webkit-search-results-decoration {
top: 1.5rem;
}
+ .md\:col-span-2{
+ grid-column: span 2 / span 2;
+ }
+
.md\:col-span-3{
grid-column: span 3 / span 3;
}
@@ -2720,10 +2936,22 @@ input[type="search"]::-webkit-search-results-decoration {
margin-bottom: 0px;
}
+ .md\:mt-14{
+ margin-top: 3.5rem;
+ }
+
.md\:mt-16{
margin-top: 4rem;
}
+ .md\:block{
+ display: block;
+ }
+
+ .md\:flex{
+ display: flex;
+ }
+
.md\:max-w-4xl{
max-width: 56rem;
}
@@ -2744,10 +2972,30 @@ input[type="search"]::-webkit-search-results-decoration {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
+ .md\:grid-cols-\[2fr_4\.5fr\]{
+ grid-template-columns: 2fr 4.5fr;
+ }
+
+ .md\:items-start{
+ align-items: flex-start;
+ }
+
.md\:gap-0{
gap: 0px;
}
+ .md\:gap-16{
+ gap: 4rem;
+ }
+
+ .md\:gap-5{
+ gap: 1.25rem;
+ }
+
+ .md\:gap-6{
+ gap: 1.5rem;
+ }
+
.md\:space-y-28 > :not([hidden]) ~ :not([hidden]){
--tw-space-y-reverse: 0;
margin-top: calc(7rem * calc(1 - var(--tw-space-y-reverse)));
@@ -2778,6 +3026,10 @@ input[type="search"]::-webkit-search-results-decoration {
padding-bottom: 3rem;
}
+ .md\:pb-14{
+ padding-bottom: 3.5rem;
+ }
+
.md\:pb-16{
padding-bottom: 4rem;
}
@@ -2790,6 +3042,10 @@ input[type="search"]::-webkit-search-results-decoration {
padding-top: 10rem;
}
+ .md\:text-left{
+ text-align: left;
+ }
+
.md\:text-3xl{
font-size: 2rem;
line-height: 1.3125;
@@ -2808,6 +3064,12 @@ input[type="search"]::-webkit-search-results-decoration {
letter-spacing: -0.017em;
}
+ .md\:text-6xl{
+ font-size: 3.75rem;
+ line-height: 1.1666;
+ letter-spacing: -0.017em;
+ }
+
.md\:after\:block::after{
content: var(--tw-content);
display: block;
@@ -2815,10 +3077,18 @@ input[type="search"]::-webkit-search-results-decoration {
}
@media (min-width: 1024px){
+ .lg\:left-32{
+ left: 8rem;
+ }
+
.lg\:col-span-2{
grid-column: span 2 / span 2;
}
+ .lg\:col-span-3{
+ grid-column: span 3 / span 3;
+ }
+
.lg\:col-span-8{
grid-column: span 8 / span 8;
}
@@ -2839,34 +3109,10 @@ input[type="search"]::-webkit-search-results-decoration {
margin-top: 4rem;
}
- .lg\:mt-24{
- margin-top: 6rem;
- }
-
- .lg\:mt-36{
- margin-top: 9rem;
- }
-
- .lg\:flex{
- display: flex;
- }
-
- .lg\:min-w-\[524px\]{
- min-width: 524px;
- }
-
- .lg\:max-w-6xl{
- max-width: 72rem;
- }
-
.lg\:max-w-md{
max-width: 28rem;
}
- .lg\:max-w-none{
- max-width: none;
- }
-
.lg\:grid-cols-2{
grid-template-columns: repeat(2, minmax(0, 1fr));
}
@@ -2879,22 +3125,6 @@ input[type="search"]::-webkit-search-results-decoration {
gap: 4rem;
}
- .lg\:gap-8{
- gap: 2rem;
- }
-
- .lg\:space-x-12 > :not([hidden]) ~ :not([hidden]){
- --tw-space-x-reverse: 0;
- margin-right: calc(3rem * var(--tw-space-x-reverse));
- margin-left: calc(3rem * calc(1 - var(--tw-space-x-reverse)));
- }
-
- .lg\:space-y-0 > :not([hidden]) ~ :not([hidden]){
- --tw-space-y-reverse: 0;
- margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0px * var(--tw-space-y-reverse));
- }
-
.lg\:text-4xl{
font-size: 2.5rem;
line-height: 1.25;
@@ -2902,14 +3132,6 @@ input[type="search"]::-webkit-search-results-decoration {
}
}
-@media (min-width: 1536px){
- .\32xl\:space-x-24 > :not([hidden]) ~ :not([hidden]){
- --tw-space-x-reverse: 0;
- margin-right: calc(6rem * var(--tw-space-x-reverse));
- margin-left: calc(6rem * calc(1 - var(--tw-space-x-reverse)));
- }
-}
-
.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{
display: none;
}