mirror of
https://github.com/zen-browser/www.git
synced 2025-07-08 09:20:00 +02:00
refactor: migrate tailwind 3 to tailwind 4
This commit is contained in:
parent
cbc1303359
commit
90c3f08d8d
12 changed files with 271 additions and 244 deletions
|
@ -28,10 +28,10 @@ const {
|
||||||
isPrimary
|
isPrimary
|
||||||
? 'border-dark bg-dark text-paper shadow-lg'
|
? 'border-dark bg-dark text-paper shadow-lg'
|
||||||
: isAlert
|
: isAlert
|
||||||
? 'bg-red-300 text-dark'
|
? 'text-dark bg-red-300'
|
||||||
: !isBordered
|
: !isBordered
|
||||||
? 'bg-subtle'
|
? 'bg-subtle'
|
||||||
: '!transition-bg border-2 border-dark hover:bg-dark hover:text-paper hover:shadow-sm',
|
: '!transition-bg border-dark hover:bg-dark hover:text-paper border-2 hover:shadow-xs',
|
||||||
]}
|
]}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
|
@ -47,10 +47,10 @@ const {
|
||||||
isPrimary
|
isPrimary
|
||||||
? 'border-dark bg-dark text-paper shadow-md'
|
? 'border-dark bg-dark text-paper shadow-md'
|
||||||
: isAlert
|
: isAlert
|
||||||
? 'bg-red-300 text-dark'
|
? 'text-dark bg-red-300'
|
||||||
: !isBordered
|
: !isBordered
|
||||||
? ''
|
? ''
|
||||||
: '!transition-bg border-2 border-dark hover:bg-dark hover:text-paper hover:shadow-sm',
|
: '!transition-bg border-dark hover:bg-dark hover:text-paper border-2 hover:shadow-xs',
|
||||||
]}
|
]}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
|
@ -58,14 +58,3 @@ const {
|
||||||
</button>
|
</button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
<style>
|
|
||||||
button,
|
|
||||||
a {
|
|
||||||
font-size: 0.9rem;
|
|
||||||
|
|
||||||
&[disabled] {
|
|
||||||
cursor: not-allowed;
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -242,7 +242,7 @@ const descriptions = Object.values(features.featureTabs).map(tab => tab.descript
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.feature {
|
.feature {
|
||||||
@apply w-full cursor-pointer select-none rounded-lg p-4 opacity-0 hover:bg-subtle;
|
@apply hover:bg-subtle w-full cursor-pointer rounded-lg p-4 opacity-0 select-none;
|
||||||
transition: background 0.2s ease-in-out;
|
transition: background 0.2s ease-in-out;
|
||||||
|
|
||||||
&[data-active='true'] {
|
&[data-active='true'] {
|
||||||
|
@ -251,7 +251,7 @@ const descriptions = Object.values(features.featureTabs).map(tab => tab.descript
|
||||||
}
|
}
|
||||||
|
|
||||||
.feature-tab {
|
.feature-tab {
|
||||||
@apply rounded-lg px-4 py-2 text-lg font-medium opacity-0 hover:bg-subtle;
|
@apply hover:bg-subtle rounded-lg px-4 py-2 text-lg font-medium opacity-0;
|
||||||
transition: background 0.2s ease-in-out;
|
transition: background 0.2s ease-in-out;
|
||||||
|
|
||||||
&[data-active='true'] {
|
&[data-active='true'] {
|
||||||
|
|
|
@ -33,10 +33,10 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<div id="mods-list-container" class="flex flex-1 flex-col">
|
<div id="mods-list-container" class="flex flex-1 flex-col">
|
||||||
<div class="flex flex-col items-center gap-4">
|
<div class="flex flex-col items-center gap-4">
|
||||||
<div
|
<div
|
||||||
class="flex w-full flex-row items-center justify-center rounded-full border-2 border-dark pr-6"
|
class="border-dark flex w-full flex-row items-center justify-center rounded-full border-2 pr-6"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
class="w-full rounded-full bg-transparent py-2 pl-6 pr-4 text-lg outline-none"
|
class="w-full rounded-full bg-transparent py-2 pr-4 pl-6 text-lg outline-hidden"
|
||||||
id="search"
|
id="search"
|
||||||
placeholder={translations.search}
|
placeholder={translations.search}
|
||||||
type="text"
|
type="text"
|
||||||
|
@ -44,7 +44,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<button
|
<button
|
||||||
id="clear-search"
|
id="clear-search"
|
||||||
title="Clear search"
|
title="Clear search"
|
||||||
class="hidden rounded-full p-1 transition-colors duration-150 hover:bg-subtle"
|
class="hover:bg-subtle hidden rounded-full p-1 transition-colors duration-150"
|
||||||
aria-label="Clear search"
|
aria-label="Clear search"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
|
@ -55,7 +55,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<div class="mb-1 flex w-full items-center justify-between gap-4 sm:mb-2">
|
<div class="mb-1 flex w-full items-center justify-between gap-4 sm:mb-2">
|
||||||
<div class="flex items-start gap-4">
|
<div class="flex items-start gap-4">
|
||||||
<button
|
<button
|
||||||
class="flex items-center gap-2 rounded-full border border-subtle px-5 py-1 text-sm font-semibold shadow-sm transition-colors hover:bg-muted focus:bg-coral/10 sm:text-base"
|
class="border-subtle hover:bg-muted focus:bg-coral/10 flex items-center gap-2 rounded-full border px-5 py-1 text-sm font-semibold shadow-xs transition-colors sm:text-base"
|
||||||
id="created-sort"
|
id="created-sort"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
|
@ -67,7 +67,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="flex items-center gap-2 rounded-full border border-subtle px-5 py-1 text-sm font-semibold shadow-sm transition-colors hover:bg-muted focus:bg-coral/10 sm:text-base"
|
class="border-subtle hover:bg-muted focus:bg-coral/10 flex items-center gap-2 rounded-full border px-5 py-1 text-sm font-semibold shadow-xs transition-colors sm:text-base"
|
||||||
id="updated-sort"
|
id="updated-sort"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
|
@ -84,7 +84,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<label class="text-md font-semibold" for="limit">
|
<label class="text-md font-semibold" for="limit">
|
||||||
{translations.sort.perPage}
|
{translations.sort.perPage}
|
||||||
</label>
|
</label>
|
||||||
<select class="rounded border border-dark bg-paper px-2 py-1 text-sm" id="limit">
|
<select class="border-dark bg-paper rounded-xs border px-2 py-1 text-sm" id="limit">
|
||||||
<option value="12">12</option>
|
<option value="12">12</option>
|
||||||
<option value="24">24</option>
|
<option value="24">24</option>
|
||||||
<option value="48">48</option>
|
<option value="48">48</option>
|
||||||
|
@ -103,7 +103,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
class="mod-card flex w-full flex-col gap-4 border-transparent transition-colors duration-100 hover:opacity-90"
|
class="mod-card flex w-full flex-col gap-4 border-transparent transition-colors duration-100 hover:opacity-90"
|
||||||
href={getLocalePath(`/mods/${mod.id}`)}
|
href={getLocalePath(`/mods/${mod.id}`)}
|
||||||
>
|
>
|
||||||
<div class="relative mb-0 block aspect-[1.85/1] h-48 overflow-hidden rounded-md border-2 border-dark object-cover shadow-md">
|
<div class="border-dark relative mb-0 block aspect-[1.85/1] h-48 overflow-hidden rounded-md border-2 object-cover shadow-md">
|
||||||
<img
|
<img
|
||||||
alt={mod.name}
|
alt={mod.name}
|
||||||
class="h-full w-full object-cover transition-transform duration-100 hover:scale-105"
|
class="h-full w-full object-cover transition-transform duration-100 hover:scale-105"
|
||||||
|
@ -140,7 +140,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<input
|
<input
|
||||||
id="page-input"
|
id="page-input"
|
||||||
aria-label="Page number"
|
aria-label="Page number"
|
||||||
class="w-16 rounded border border-dark bg-transparent px-2 py-1 text-center text-sm"
|
class="border-dark w-16 rounded-xs border bg-transparent px-2 py-1 text-center text-sm"
|
||||||
type="text"
|
type="text"
|
||||||
value="1"
|
value="1"
|
||||||
/>
|
/>
|
||||||
|
@ -152,7 +152,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
</span>
|
</span>
|
||||||
</form>
|
</form>
|
||||||
<a
|
<a
|
||||||
class="px-3 py-2 text-dark hover:text-gray-600"
|
class="text-dark px-3 py-2 hover:text-gray-600"
|
||||||
href={getLocalePath('/mods?page=2')}
|
href={getLocalePath('/mods?page=2')}
|
||||||
data-page="2"
|
data-page="2"
|
||||||
>
|
>
|
||||||
|
@ -660,7 +660,7 @@ const totalPages = Math.ceil(allMods.length / defaultLimit)
|
||||||
<input
|
<input
|
||||||
id="page-input"
|
id="page-input"
|
||||||
aria-label="Page number"
|
aria-label="Page number"
|
||||||
class="w-16 rounded border border-dark bg-transparent px-2 py-1 text-center text-sm"
|
class="w-16 rounded-xs border border-dark bg-transparent px-2 py-1 text-center text-sm"
|
||||||
type="text"
|
type="text"
|
||||||
value="${this.state.page}"
|
value="${this.state.page}"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -22,7 +22,7 @@ const {
|
||||||
<!-- Desktop Navigation -->
|
<!-- Desktop Navigation -->
|
||||||
<Astronav>
|
<Astronav>
|
||||||
<MenuItems
|
<MenuItems
|
||||||
class="container relative z-20 grid w-full grid-cols-2 items-center gap-2 bg-paper py-3 lg:grid lg:grid-cols-[auto_1fr_auto] lg:py-6"
|
class="bg-paper relative z-20 container grid w-full grid-cols-2 items-center gap-2 py-3 lg:grid lg:grid-cols-[auto_1fr_auto] lg:py-6"
|
||||||
>
|
>
|
||||||
<a class="flex items-center gap-2 text-lg font-bold" href={getLocalePath('/')}>
|
<a class="flex items-center gap-2 text-lg font-bold" href={getLocalePath('/')}>
|
||||||
<Logo class="text-coral" />
|
<Logo class="text-coral" />
|
||||||
|
@ -121,7 +121,7 @@ const {
|
||||||
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
|
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
|
||||||
<label
|
<label
|
||||||
for="mobile-menu-toggle"
|
for="mobile-menu-toggle"
|
||||||
class="cursor-pointer p-2 text-dark lg:hidden"
|
class="text-dark cursor-pointer p-2 lg:hidden"
|
||||||
aria-label="Open menu"
|
aria-label="Open menu"
|
||||||
>
|
>
|
||||||
<MenuIcon class="h-6 w-6" />
|
<MenuIcon class="h-6 w-6" />
|
||||||
|
@ -132,29 +132,3 @@ const {
|
||||||
|
|
||||||
<!-- Mobile Hamburger Menu Content -->
|
<!-- Mobile Hamburger Menu Content -->
|
||||||
<MobileMenu />
|
<MobileMenu />
|
||||||
|
|
||||||
<style>
|
|
||||||
.navbar-dropdown {
|
|
||||||
@apply absolute left-1/2 mt-2 grid !-translate-x-1/2 !transform grid-cols-2 gap-2 rounded-lg border-2 border-dark bg-paper p-3 shadow-sm;
|
|
||||||
& .dropdown-item {
|
|
||||||
@apply flex cursor-pointer select-none flex-col gap-2 rounded-lg p-4 transition-colors duration-200;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
@apply bg-muted;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .dropdown-title {
|
|
||||||
@apply font-bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .dropdown-description {
|
|
||||||
@apply text-sm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style is:global>
|
|
||||||
#theme-switcher * {
|
|
||||||
@apply text-dark;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ generateItems(props.knownIssues, 'known')
|
||||||
{
|
{
|
||||||
isTwilight ? (
|
isTwilight ? (
|
||||||
<a
|
<a
|
||||||
class="!mb-2 block w-fit rounded-full bg-coral px-3 py-1 text-xs text-paper"
|
class="bg-coral text-paper !mb-2 block w-fit rounded-full px-3 py-1 text-xs"
|
||||||
href={getLocalePath('/download?twilight')}
|
href={getLocalePath('/download?twilight')}
|
||||||
>
|
>
|
||||||
{releaseNoteItem.twilight}
|
{releaseNoteItem.twilight}
|
||||||
|
@ -142,7 +142,7 @@ generateItems(props.knownIssues, 'known')
|
||||||
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
||||||
<a
|
<a
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="text-xs text-coral underline decoration-wavy opacity-80"
|
class="text-coral text-xs underline decoration-wavy opacity-80"
|
||||||
href={`https://www.mozilla.org/en-US/firefox/${ffVersion}/releasenotes/`}
|
href={`https://www.mozilla.org/en-US/firefox/${ffVersion}/releasenotes/`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
|
@ -155,7 +155,7 @@ generateItems(props.knownIssues, 'known')
|
||||||
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
||||||
<a
|
<a
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="zen-link whitespace-nowrap text-xs !no-underline opacity-80"
|
class="zen-link text-xs whitespace-nowrap !no-underline opacity-80"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href={`https://github.com/zen-browser/desktop/releases/tag/${isTwilight ? 'twilight' : props.version}`}
|
href={`https://github.com/zen-browser/desktop/releases/tag/${isTwilight ? 'twilight' : props.version}`}
|
||||||
>{releaseNoteItem.githubRelease}</a
|
>{releaseNoteItem.githubRelease}</a
|
||||||
|
@ -166,7 +166,7 @@ generateItems(props.knownIssues, 'known')
|
||||||
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
||||||
<a
|
<a
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="zen-link whitespace-nowrap text-xs !no-underline opacity-80"
|
class="zen-link text-xs whitespace-nowrap !no-underline opacity-80"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href={`https://github.com/zen-browser/desktop/actions/runs/${props.workflowId}`}
|
href={`https://github.com/zen-browser/desktop/actions/runs/${props.workflowId}`}
|
||||||
>
|
>
|
||||||
|
@ -181,7 +181,7 @@ generateItems(props.knownIssues, 'known')
|
||||||
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
<span class="text-muted-foreground mx-3 hidden sm:block">•</span>
|
||||||
<a
|
<a
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="zen-link whitespace-nowrap text-xs !no-underline opacity-80"
|
class="zen-link text-xs whitespace-nowrap !no-underline opacity-80"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href={compareLink}
|
href={compareLink}
|
||||||
>
|
>
|
||||||
|
@ -230,44 +230,4 @@ generateItems(props.knownIssues, 'known')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<style is:global>
|
|
||||||
.ac-accordion-item-title {
|
|
||||||
@apply !text-dark;
|
|
||||||
flex-direction: row-reverse !important;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 0.8 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
& > svg {
|
|
||||||
color: var(--zen-dark) !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.ac-accordion-item {
|
|
||||||
transition: height 0.2s ease-in-out !important;
|
|
||||||
|
|
||||||
& li {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.ac-accordion {
|
|
||||||
&.ac-accordion--light {
|
|
||||||
> * + * {
|
|
||||||
border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)) !important;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.extra {
|
|
||||||
& a {
|
|
||||||
@apply !text-coral underline underline-offset-4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.release-note-item {
|
|
||||||
border-color: light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.2));
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -21,7 +21,7 @@ const { label, href, checksum } = Astro.props
|
||||||
<div class="relative flex flex-col">
|
<div class="relative flex flex-col">
|
||||||
<a
|
<a
|
||||||
href={href}
|
href={href}
|
||||||
class="download-link group flex flex-1 items-center justify-between rounded-2xl border border-subtle p-4 transition-all duration-200 hover:border-coral hover:shadow-sm data-[twilight='true']:hover:border-zen-blue dark:hover:shadow-md"
|
class="download-link group border-subtle hover:border-coral data-[twilight='true']:hover:border-zen-blue flex flex-1 items-center justify-between rounded-2xl border p-4 transition-all duration-200 hover:shadow-xs dark:hover:shadow-md"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
|
@ -32,7 +32,7 @@ const { label, href, checksum } = Astro.props
|
||||||
<span class="group/checksum relative hidden items-center md:flex">
|
<span class="group/checksum relative hidden items-center md:flex">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="checksum-icon-btn text-muted-foreground flex items-center justify-center rounded-full p-1 transition-colors duration-150 hover:text-coral focus:outline-none focus:ring-2 focus:ring-coral data-[twilight='true']:hover:text-zen-blue data-[twilight='true']:focus:ring-zen-blue"
|
class="checksum-icon-btn text-muted-foreground hover:text-coral focus:ring-coral data-[twilight='true']:hover:text-zen-blue data-[twilight='true']:focus:ring-zen-blue flex items-center justify-center rounded-full p-1 transition-colors duration-150 focus:ring-2 focus:outline-hidden"
|
||||||
aria-label="Show SHA-256 checksum"
|
aria-label="Show SHA-256 checksum"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
|
@ -50,14 +50,14 @@ const { label, href, checksum } = Astro.props
|
||||||
<path d="M9 12l2 2 4-4" />
|
<path d="M9 12l2 2 4-4" />
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<span class="absolute -top-10 left-1/2 z-50 hidden min-w-[120px] -translate-x-1/2 select-none whitespace-nowrap rounded-md border border-subtle bg-[rgba(255,255,255,0.98)] px-3 py-2 text-xs text-gray-700 opacity-100 shadow transition-opacity duration-150 group-focus-within/checksum:hidden group-hover/checksum:flex group-focus-within/checksum:group-hover/checksum:hidden dark:bg-[rgba(24,24,27,0.98)] dark:text-gray-100">
|
<span class="border-subtle absolute -top-10 left-1/2 z-50 hidden min-w-[120px] -translate-x-1/2 rounded-md border bg-[rgba(255,255,255,0.98)] px-3 py-2 text-xs whitespace-nowrap text-gray-700 opacity-100 shadow-sm transition-opacity duration-150 select-none group-focus-within/checksum:hidden group-hover/checksum:flex group-focus-within/checksum:group-hover/checksum:hidden dark:bg-[rgba(24,24,27,0.98)] dark:text-gray-100">
|
||||||
{buttonCard.showChecksum}
|
{buttonCard.showChecksum}
|
||||||
</span>
|
</span>
|
||||||
<span class="checksum-tooltip popover absolute -left-14 -top-12 z-50 hidden min-w-[220px] items-center gap-2 whitespace-nowrap rounded-md border border-subtle bg-[rgba(255,255,255,0.98)] px-3 py-2 text-xs text-gray-700 opacity-100 shadow transition-opacity duration-150 group-focus-within/checksum:flex dark:bg-[rgba(24,24,27,0.98)] dark:text-gray-100">
|
<span class="checksum-tooltip popover border-subtle absolute -top-12 -left-14 z-50 hidden min-w-[220px] items-center gap-2 rounded-md border bg-[rgba(255,255,255,0.98)] px-3 py-2 text-xs whitespace-nowrap text-gray-700 opacity-100 shadow-sm transition-opacity duration-150 group-focus-within/checksum:flex dark:bg-[rgba(24,24,27,0.98)] dark:text-gray-100">
|
||||||
<span class="font-mono flex-1 truncate text-xs">{checksum}</span>
|
<span class="flex-1 truncate font-mono text-xs">{checksum}</span>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="copy-btn rounded bg-coral px-2 py-1 text-xs text-white hover:bg-coral/80 data-[twilight='true']:bg-zen-blue data-[twilight='true']:hover:bg-zen-blue/80"
|
class="copy-btn bg-coral hover:bg-coral/80 data-[twilight='true']:bg-zen-blue data-[twilight='true']:hover:bg-zen-blue/80 rounded-xs px-2 py-1 text-xs text-white"
|
||||||
>
|
>
|
||||||
{buttonCard.copy}
|
{buttonCard.copy}
|
||||||
</button>
|
</button>
|
||||||
|
@ -69,12 +69,12 @@ const { label, href, checksum } = Astro.props
|
||||||
<div class="flex flex-col items-end gap-2">
|
<div class="flex flex-col items-end gap-2">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span
|
<span
|
||||||
class="release-type-tag rounded-full bg-coral/10 px-2 py-1 text-xs font-medium text-coral transition-colors duration-200 group-hover:bg-coral/20 data-[twilight='true']:bg-zen-blue/10 data-[twilight='true']:text-zen-blue data-[twilight='true']:group-hover:bg-zen-blue/20"
|
class="release-type-tag bg-coral/10 text-coral group-hover:bg-coral/20 data-[twilight='true']:bg-zen-blue/10 data-[twilight='true']:text-zen-blue data-[twilight='true']:group-hover:bg-zen-blue/20 rounded-full px-2 py-1 text-xs font-medium transition-colors duration-200"
|
||||||
>
|
>
|
||||||
{buttonCard.beta}
|
{buttonCard.beta}
|
||||||
</span>
|
</span>
|
||||||
<div
|
<div
|
||||||
class="download-arrow-icon text-muted-foreground rounded-xl border border-subtle p-2 transition-colors duration-200 group-hover:border-coral group-hover:text-coral data-[twilight='true']:group-hover:border-zen-blue data-[twilight='true']:group-hover:text-zen-blue"
|
class="download-arrow-icon text-muted-foreground border-subtle group-hover:border-coral group-hover:text-coral data-[twilight='true']:group-hover:border-zen-blue data-[twilight='true']:group-hover:text-zen-blue rounded-xl border p-2 transition-colors duration-200"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
width="16"
|
width="16"
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
---
|
---
|
||||||
|
import '~/styles/global.css'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string
|
title: string
|
||||||
description?: string
|
description?: string
|
||||||
|
@ -98,77 +100,10 @@ const locale = getLocale(Astro)
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body
|
<body
|
||||||
class="min-h-[max(100dvh,_64rem)] overflow-x-hidden text-balance bg-paper font-['bricolage-grotesque'] text-dark"
|
class="bg-paper text-dark font-bricolage min-h-[max(100dvh,_64rem)] overflow-x-hidden text-balance"
|
||||||
>
|
>
|
||||||
<NavBar />
|
<NavBar />
|
||||||
<slot />
|
<slot />
|
||||||
<Footer />
|
<Footer />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
<style is:global>
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Junicode';
|
|
||||||
src: url('/fonts/JunicodeVF-Roman-subset.woff2') format('woff2');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Junicode-Italic';
|
|
||||||
src: url('/fonts/JunicodeVF-Italic-subset.woff2') format('woff2');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--zen-paper: #f2f0e3;
|
|
||||||
--zen-dark: #2e2e2e;
|
|
||||||
--zen-muted: rgba(0, 0, 0, 0.05);
|
|
||||||
--zen-subtle: rgba(0, 0, 0, 0.05);
|
|
||||||
|
|
||||||
&[data-theme='dark'] {
|
|
||||||
--zen-paper: #1f1f1f;
|
|
||||||
--zen-dark: #d1cfc0;
|
|
||||||
--zen-muted: rgba(255, 255, 255, 0.05);
|
|
||||||
--zen-subtle: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
|
|
||||||
body,
|
|
||||||
body > * {
|
|
||||||
font-family: 'Bricolage Grotesque', sans-serif;
|
|
||||||
font-optical-sizing: auto;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 500;
|
|
||||||
font-variation-settings: 'width' 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 .italic {
|
|
||||||
font-family: 'Junicode-Italic', serif;
|
|
||||||
font-weight: 400;
|
|
||||||
font-feature-settings: 'swsh' 0;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.zen-link {
|
|
||||||
@apply text-coral underline underline-offset-4;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style is:global>
|
|
||||||
/* Declare a custom CSS class to make the icon look right */
|
|
||||||
.svg-inline--fa {
|
|
||||||
overflow: visible;
|
|
||||||
box-sizing: content-box;
|
|
||||||
display: inline-block;
|
|
||||||
height: 1em;
|
|
||||||
vertical-align: -0.125em;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -36,20 +36,20 @@ const platformDescriptions = download.platformDescriptions
|
||||||
<DownloadScript />
|
<DownloadScript />
|
||||||
|
|
||||||
<Layout title={layout.download.title} description={layout.download.description}>
|
<Layout title={layout.download.title} description={layout.download.description}>
|
||||||
<main class="flex min-h-screen flex-col px-6 data-[os='windows']:bg-zen-blue">
|
<main class="data-[os='windows']:bg-zen-blue flex min-h-screen flex-col px-6">
|
||||||
<div class="container relative mx-auto py-12">
|
<div class="relative container mx-auto py-12">
|
||||||
<div class="mb-6 mt-12 flex flex-col gap-4">
|
<div class="mt-12 mb-6 flex flex-col gap-4">
|
||||||
<Description id="download-title" class="text-6xl font-bold">{download.title}</Description>
|
<Description id="download-title" class="text-6xl font-bold">{download.title}</Description>
|
||||||
<Description class="max-w-xl text-pretty">
|
<Description class="max-w-xl text-pretty">
|
||||||
{download.description}
|
{download.description}
|
||||||
</Description>
|
</Description>
|
||||||
<div
|
<div
|
||||||
id="twilight-info"
|
id="twilight-info"
|
||||||
class="hidden max-w-xl items-center justify-center gap-3 text-pretty rounded-xl border border-zen-blue/20 bg-zen-blue/5 p-4 text-left data-[twilight='true']:flex"
|
class="border-zen-blue/20 bg-zen-blue/5 hidden max-w-xl items-center justify-center gap-3 rounded-xl border p-4 text-left text-pretty data-[twilight='true']:flex"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
class="mt-0.5 h-5 w-5 flex-shrink-0 text-zen-blue"
|
class="text-zen-blue mt-0.5 h-5 w-5 shrink-0"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
|
@ -68,10 +68,10 @@ const platformDescriptions = download.platformDescriptions
|
||||||
<!-- Platform selector -->
|
<!-- Platform selector -->
|
||||||
<div class="mb-6 flex">
|
<div class="mb-6 flex">
|
||||||
<div
|
<div
|
||||||
class="inline-flex rounded-3xl bg-[rgba(255,255,255,0.4)] p-2 shadow-md dark:bg-[rgba(0,0,0,0.3)] dark:shadow-sm"
|
class="inline-flex rounded-3xl bg-[rgba(255,255,255,0.4)] p-2 shadow-md dark:bg-[rgba(0,0,0,0.3)] dark:shadow-xs"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="platform-selector rounded-2xl px-5 py-2.5 transition-all duration-200 data-[active='true']:bg-subtle"
|
class="platform-selector data-[active='true']:bg-subtle rounded-2xl px-5 py-2.5 transition-all duration-200"
|
||||||
data-platform="mac"
|
data-platform="mac"
|
||||||
>
|
>
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
|
@ -80,7 +80,7 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="platform-selector rounded-2xl px-5 py-2.5 transition-all duration-200 data-[active='true']:bg-subtle"
|
class="platform-selector data-[active='true']:bg-subtle rounded-2xl px-5 py-2.5 transition-all duration-200"
|
||||||
data-platform="windows"
|
data-platform="windows"
|
||||||
>
|
>
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
|
@ -89,7 +89,7 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="platform-selector rounded-2xl px-5 py-2.5 transition-all duration-200 data-[active='true']:bg-subtle"
|
class="platform-selector data-[active='true']:bg-subtle rounded-2xl px-5 py-2.5 transition-all duration-200"
|
||||||
data-platform="linux"
|
data-platform="linux"
|
||||||
>
|
>
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
|
@ -152,10 +152,10 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="grid aspect-square h-12 w-12 place-items-center rounded-xl border border-subtle transition-all duration-100 hover:bg-coral hover:bg-opacity-10 group-hover:border-coral group-hover:border-opacity-10"
|
class="border-subtle hover:bg-coral/10 group-hover:border-coral/10 grid aspect-square h-12 w-12 place-items-center rounded-xl border transition-all duration-100"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="text-muted-foreground transition-all duration-200 group-hover:text-coral"
|
class="text-muted-foreground group-hover:text-coral transition-all duration-200"
|
||||||
>
|
>
|
||||||
<Fragment set:html={githubIcon.html} />
|
<Fragment set:html={githubIcon.html} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -177,10 +177,10 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="rounded-xl border border-subtle p-3 transition-all duration-100 hover:bg-coral hover:bg-opacity-10 group-hover:border-coral group-hover:border-opacity-20"
|
class="border-subtle hover:bg-coral/10 group-hover:border-coral/20 rounded-xl border p-3 transition-all duration-100"
|
||||||
>
|
>
|
||||||
<ExternalLinkIcon
|
<ExternalLinkIcon
|
||||||
class="h-5 w-5 transition-all duration-200 group-hover:text-coral"
|
class="group-hover:text-coral h-5 w-5 transition-all duration-200"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -189,8 +189,8 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Security Notice -->
|
<!-- Security Notice -->
|
||||||
<div class="grid grid-cols-[auto,1fr] gap-4 rounded-2xl bg-subtle bg-opacity-10 p-6">
|
<div class="bg-subtle grid grid-cols-[auto_1fr] gap-4 rounded-2xl p-6">
|
||||||
<div class="h-fit rounded-xl bg-subtle p-3">
|
<div class="bg-subtle h-fit rounded-xl p-3">
|
||||||
<LockIcon class="h-5 w-5" />
|
<LockIcon class="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -204,23 +204,3 @@ const platformDescriptions = download.platformDescriptions
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
<style is:global>
|
|
||||||
/* Download card icon */
|
|
||||||
.download-card__icon {
|
|
||||||
@apply flex h-10 w-10 items-center justify-center rounded-full bg-subtle p-2 text-coral data-[twilight='true']:text-zen-blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make FontAwesome icons match size */
|
|
||||||
.download-card__icon svg {
|
|
||||||
width: 1.5rem;
|
|
||||||
height: 1.5rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style is:global>
|
|
||||||
.os-icon svg {
|
|
||||||
height: 3rem;
|
|
||||||
width: 3rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -20,18 +20,3 @@ const { layout } = getUI(locale)
|
||||||
<Community />
|
<Community />
|
||||||
</main>
|
</main>
|
||||||
</Layout>
|
</Layout>
|
||||||
<style>
|
|
||||||
@keyframes headerSlideIn {
|
|
||||||
0% {
|
|
||||||
transform: translateY(100%);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#header-browser-image {
|
|
||||||
animation: headerSlideIn 0.5s ease-in-out;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script></script>
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ const {
|
||||||
ogImage={mod.image}
|
ogImage={mod.image}
|
||||||
>
|
>
|
||||||
<main class="container mt-6 2xl:mt-0">
|
<main class="container mt-6 2xl:mt-0">
|
||||||
<div class="mx-auto mb-24 mt-12 flex flex-col gap-6 lg:mt-32">
|
<div class="mx-auto mt-12 mb-24 flex flex-col gap-6 lg:mt-32">
|
||||||
<div
|
<div
|
||||||
id="install-theme-error"
|
id="install-theme-error"
|
||||||
class="flex flex-col items-center justify-center gap-2 rounded-xl bg-red-200 p-2 pl-4 md:flex-row md:justify-between dark:bg-red-700"
|
class="flex flex-col items-center justify-center gap-2 rounded-xl bg-red-200 p-2 pl-4 md:flex-row md:justify-between dark:bg-red-700"
|
||||||
|
@ -74,7 +74,7 @@ const {
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
href="/download"
|
href="/download"
|
||||||
class="inline-flex flex-shrink-0 whitespace-nowrap !rounded-lg bg-red-300 dark:bg-red-800"
|
class="inline-flex shrink-0 !rounded-lg bg-red-300 whitespace-nowrap dark:bg-red-800"
|
||||||
isAlert
|
isAlert
|
||||||
>
|
>
|
||||||
{slug.alert.button}
|
{slug.alert.button}
|
||||||
|
@ -89,10 +89,10 @@ const {
|
||||||
<img
|
<img
|
||||||
src={mod.image}
|
src={mod.image}
|
||||||
alt={mod.name}
|
alt={mod.name}
|
||||||
class="h-full w-full rounded-xl border-2 border-dark object-cover shadow"
|
class="border-dark object-cover-sm h-full w-full rounded-xl border-2"
|
||||||
/>
|
/>
|
||||||
<div class="flex flex-col justify-between gap-2 sm:flex-row">
|
<div class="flex flex-col justify-between gap-2 sm:flex-row">
|
||||||
<div class="flex flex-shrink-0 flex-col gap-2 font-normal">
|
<div class="flex shrink-0 flex-col gap-2 font-normal">
|
||||||
<p
|
<p
|
||||||
set:html={slug.createdBy
|
set:html={slug.createdBy
|
||||||
.replace(
|
.replace(
|
||||||
|
@ -134,8 +134,8 @@ const {
|
||||||
-->
|
-->
|
||||||
</div>
|
</div>
|
||||||
<div></div>
|
<div></div>
|
||||||
</main></Layout
|
</main>
|
||||||
>
|
</Layout>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const backButton = document.getElementById('back-button') as HTMLAnchorElement
|
const backButton = document.getElementById('back-button') as HTMLAnchorElement
|
||||||
|
|
|
@ -21,7 +21,7 @@ const {
|
||||||
<main
|
<main
|
||||||
class="container flex h-full min-h-[1000px] flex-1 flex-col items-center justify-center py-4"
|
class="container flex h-full min-h-[1000px] flex-1 flex-col items-center justify-center py-4"
|
||||||
>
|
>
|
||||||
<div id="release-notes" class="py-42 flex min-h-screen w-full flex-col justify-center gap-8">
|
<div id="release-notes" class="flex min-h-screen w-full flex-col justify-center gap-8 py-42">
|
||||||
<Description class="mt-48 text-6xl font-bold">{releaseNotes.topSection.title}</Description>
|
<Description class="mt-48 text-6xl font-bold">{releaseNotes.topSection.title}</Description>
|
||||||
<p
|
<p
|
||||||
class="text-base opacity-55"
|
class="text-base opacity-55"
|
||||||
|
@ -46,7 +46,7 @@ const {
|
||||||
{releaseNotesData.map(notes => <ReleaseNoteItem {...notes} />)}
|
{releaseNotesData.map(notes => <ReleaseNoteItem {...notes} />)}
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<Button id="scroll-top" isPrimary class="fixed bottom-8 right-8" onclick="window.scrollTo(0, 0)">
|
<Button id="scroll-top" isPrimary class="fixed right-8 bottom-8" onclick="window.scrollTo(0, 0)">
|
||||||
<p class="hidden items-center gap-2 sm:flex">
|
<p class="hidden items-center gap-2 sm:flex">
|
||||||
{releaseNotes.backToTop}
|
{releaseNotes.backToTop}
|
||||||
<ArrowUpIcon aria-hidden="true" class="size-4" />
|
<ArrowUpIcon aria-hidden="true" class="size-4" />
|
||||||
|
@ -54,17 +54,17 @@ const {
|
||||||
<ArrowUpIcon aria-label="Back to the top" class="size-4 sm:hidden" />
|
<ArrowUpIcon aria-label="Back to the top" class="size-4 sm:hidden" />
|
||||||
</Button>
|
</Button>
|
||||||
</Layout>
|
</Layout>
|
||||||
<Modal id="version-modal" class="m-auto border border-[--zen-dark] !bg-paper">
|
<Modal id="version-modal" class="!bg-paper m-auto border border-[--zen-dark]">
|
||||||
<ModalHeader class="border-b border-[--zen-dark]">
|
<ModalHeader class="border-b border-[--zen-dark]">
|
||||||
<p class="text-4xl font-bold text-dark">{releaseNotes.chooseVersion}</p>
|
<p class="text-dark text-4xl font-bold">{releaseNotes.chooseVersion}</p>
|
||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div id="version-list" class="flex flex-col gap-2 text-xl text-dark">
|
<div id="version-list" class="text-dark flex flex-col gap-2 text-xl">
|
||||||
{
|
{
|
||||||
releaseNotesData.map(note => (
|
releaseNotesData.map(note => (
|
||||||
<button
|
<button
|
||||||
aria-label={`Navigate to version ${note.version}`}
|
aria-label={`Navigate to version ${note.version}`}
|
||||||
class="w-full text-left transition-colors duration-150 hover:text-coral"
|
class="hover:text-coral w-full text-left transition-colors duration-150"
|
||||||
data-version={note.version}
|
data-version={note.version}
|
||||||
>
|
>
|
||||||
{note.version}
|
{note.version}
|
||||||
|
@ -131,9 +131,3 @@ const {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style is:global>
|
|
||||||
#version-modal > * {
|
|
||||||
font-family: 'Bricolage Grotesque', sans-serif !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
210
src/styles/global.css
Normal file
210
src/styles/global.css
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
@import 'tailwindcss';
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Junicode';
|
||||||
|
src: url('/fonts/JunicodeVF-Roman-subset.woff2') format('woff2');
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Junicode-Italic';
|
||||||
|
src: url('/fonts/JunicodeVF-Italic-subset.woff2') format('woff2');
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--breakpoint-sm: 640px;
|
||||||
|
--breakpoint-md: 768px;
|
||||||
|
--breakpoint-lg: 1024px;
|
||||||
|
--breakpoint-xl: 1280px;
|
||||||
|
|
||||||
|
--color-paper: #f2f0e3;
|
||||||
|
--color-coral: #f76f53;
|
||||||
|
--color-dark: #2e2e2e;
|
||||||
|
--color-subtle: rgba(0, 0, 0, 0.05);
|
||||||
|
--color-muted: rgba(0, 0, 0, 0.05);
|
||||||
|
--color-zen-blue: #6287f5;
|
||||||
|
--color-zen-green: #63f78b;
|
||||||
|
--font-junicode: 'Junicode, serif';
|
||||||
|
--font-junicode-italic: 'Junicode-Italic, serif';
|
||||||
|
--font-junicode--font-feature-settings: 'swsh' 1;
|
||||||
|
--font-bricolage: 'Bricolage Grotesque', sans-serif;
|
||||||
|
--font-bricolage--font-variation-settings: 'wdth' 100;
|
||||||
|
--default-font-family: var(--font-bricolage);
|
||||||
|
|
||||||
|
--animate-fade-in: fadeIn 2s ease-in-out;
|
||||||
|
--animate-breathe: breathe 5s ease-in-out infinite;
|
||||||
|
--animate-header-slide-in: headerSlideIn 0.5s ease-in-out;
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes breathe {
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: scale(1.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes headerSlideIn {
|
||||||
|
0% {
|
||||||
|
transform: translateY(100%);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
body > * {
|
||||||
|
font-family: 'Bricolage Grotesque', sans-serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
font-variation-settings: 'wdth' 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 .italic {
|
||||||
|
font-family: 'Junicode-Italic', serif;
|
||||||
|
font-weight: 400;
|
||||||
|
font-feature-settings: 'swsh' 0;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
|
||||||
|
|
||||||
|
@layer base {
|
||||||
|
@variant dark {
|
||||||
|
--color-paper: #1f1f1f;
|
||||||
|
--color-dark: #d1cfc0;
|
||||||
|
--color-subtle: rgba(255, 255, 255, 0.1);
|
||||||
|
--color-muted: rgba(255, 255, 255, 0.05);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility container {
|
||||||
|
@apply mx-auto w-full px-4;
|
||||||
|
|
||||||
|
@media (min-width: 100%) {
|
||||||
|
@apply w-full max-w-full px-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@variant sm {
|
||||||
|
@apply w-full max-w-full;
|
||||||
|
}
|
||||||
|
|
||||||
|
@variant md {
|
||||||
|
@apply w-full max-w-256;
|
||||||
|
}
|
||||||
|
|
||||||
|
@variant lg {
|
||||||
|
@apply w-full max-w-256 px-6;
|
||||||
|
}
|
||||||
|
|
||||||
|
@variant xl {
|
||||||
|
@apply w-full max-w-320 px-8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@layer components {
|
||||||
|
#theme-switcher * {
|
||||||
|
@apply text-dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
#version-modal > * {
|
||||||
|
@apply font-bricolage!;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zen-link {
|
||||||
|
@apply text-coral underline underline-offset-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ac-accordion-item-title {
|
||||||
|
@apply !text-dark [&>svg]:text-dark! flex-row-reverse! hover:opacity-80!;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ac-accordion-item {
|
||||||
|
@apply transition-[height]! duration-200! ease-in-out! [&>li]:opacity-50!;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ac-accordion {
|
||||||
|
&.ac-accordion--light {
|
||||||
|
> * + * {
|
||||||
|
@apply w-full;
|
||||||
|
|
||||||
|
border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.extra {
|
||||||
|
& a {
|
||||||
|
@apply !text-coral underline underline-offset-4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.release-note-item {
|
||||||
|
border-color: light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.2));
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg-inline--fa {
|
||||||
|
@apply box-border inline-block h-4 overflow-visible align-[-0.125em];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Download card icon */
|
||||||
|
.download-card__icon {
|
||||||
|
@apply bg-subtle text-coral data-[twilight='true']:text-zen-blue flex h-10 w-10 items-center justify-center rounded-full p-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make FontAwesome icons match size */
|
||||||
|
.download-card__icon svg {
|
||||||
|
@apply h-6 w-6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.os-icon svg {
|
||||||
|
@apply h-12 w-12;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
a {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
|
||||||
|
&[disabled] {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-dropdown {
|
||||||
|
@apply border-dark bg-paper absolute left-1/2 mt-2 grid !-translate-x-1/2 !transform grid-cols-2 gap-2 rounded-lg border-2 p-3 shadow-xs;
|
||||||
|
& .dropdown-item {
|
||||||
|
@apply flex cursor-pointer flex-col gap-2 rounded-lg p-4 transition-colors duration-200 select-none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@apply bg-muted;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .dropdown-title {
|
||||||
|
@apply font-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .dropdown-description {
|
||||||
|
@apply text-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue