Refine the website and handbook with real desktop screenshots

This commit is contained in:
Samuel Onoja committed 2026-10-10 22:34:45 +01:00
1 parent 9c3893b36d
commit 0a48c07e86
41 files changed
+478 -1292

No files matched your search

+1 -1
View File
@@ -13,7 +13,7 @@
Ferese combines a window manager and desktop shell with one configuration. Ferese combines a window manager and desktop shell with one configuration.
![Ferese Blue dark desktop with Appearance settings](docs/images/screenshots/ferese-blue-dark.webp) ![Ferese desktop with a translucent Now Playing popup showing Spotify artwork and playback controls](docs/images/screenshots/ferese-media.webp)
[View more screenshots](docs/screenshots.md) [View more screenshots](docs/screenshots.md)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

+36 -24
View File
@@ -1,45 +1,57 @@
# Screenshots # Screenshots
Click an image to open it at full size. Click an image to open the original 2880 × 1800 capture.
## Ferese Blue dark ## The desktop
Appearance settings with the default dark wallpaper. A translucent panel over a mountain lake at dusk.
[![Ferese Blue dark desktop with Appearance settings.](images/screenshots/ferese-blue-dark.webp)](images/screenshots/ferese-blue-dark.webp) [![Ferese desktop with Now Playing controls above a mountain lake at dusk.](images/screenshots/ferese-desktop-lake.webp)](images/screenshots/ferese-desktop-lake.webp)
## Ferese Blue light
Appearance settings and the calendar with the default light wallpaper.
[![Ferese Blue light desktop with Appearance settings and the calendar.](images/screenshots/ferese-blue-light.webp)](images/screenshots/ferese-blue-light.webp)
## Workspace overview ## Workspace overview
Terminal and Settings windows, with previews of three workspaces. Open windows and previews of three workspaces.
[![Ferese Blue overview with a terminal, Settings and three workspace cards.](images/screenshots/ferese-blue-overview.webp)](images/screenshots/ferese-blue-overview.webp) [![Ferese Overview with terminal and reading windows.](images/screenshots/ferese-overview.webp)](images/screenshots/ferese-overview.webp)
## Everforest ## Workspace previews
Appearance settings and the calendar over a custom forest wallpaper. Thumbnails of three workspaces, with the current workspace highlighted.
[![Everforest desktop with Appearance settings and the calendar.](images/screenshots/everforest-desktop.webp)](images/screenshots/everforest-desktop.webp) [![Workspace previews above a browser window on the city desktop.](images/screenshots/ferese-workspace-preview.webp)](images/screenshots/ferese-workspace-preview.webp)
## Gruvbox ## Windows side by side
Appearance settings and the calendar over a custom landscape wallpaper. A terminal and reading window share the desktop.
[![Gruvbox desktop with Appearance settings and the calendar.](images/screenshots/gruvbox-desktop.webp)](images/screenshots/gruvbox-desktop.webp) [![Terminal and reading windows arranged side by side.](images/screenshots/ferese-window-layout.webp)](images/screenshots/ferese-window-layout.webp)
## Rosé Pine dark ## Appearance
Theme previews, Control Center and a file manager. Six themes, each with paired light and dark colours.
[![Rosé Pine dark desktop with Settings, Control Center and a file manager.](images/screenshots/rose-pine-dark.webp)](images/screenshots/rose-pine-dark.webp) [![Ferese Appearance settings with six theme previews.](images/screenshots/ferese-appearance.webp)](images/screenshots/ferese-appearance.webp)
## Rosé Pine light ## Panel & Shell
Appearance settings and a file manager over the same custom wallpaper. Panel composition, position and surface settings.
[![Rosé Pine light desktop with Settings and a file manager.](images/screenshots/rose-pine-light.webp)](images/screenshots/rose-pine-light.webp) [![Panel and Shell settings with a composition preview and island surfaces.](images/screenshots/ferese-panel-settings.webp)](images/screenshots/ferese-panel-settings.webp)
## Now playing
Spotify artwork and playback controls in a translucent popup.
[![Ferese Now Playing popup above the city wallpaper.](images/screenshots/ferese-media.webp)](images/screenshots/ferese-media.webp)
## Spotify and the terminal
Two windows over a mountain lake at dusk.
[![Spotify and a terminal open over the mountain lake wallpaper.](images/screenshots/ferese-spotify.webp)](images/screenshots/ferese-spotify.webp)
## Bottom panel
The panel along the bottom edge, with a notification above it.
[![Bottom panel and a screenshot notification over the city wallpaper.](images/screenshots/ferese-bottom-panel.webp)](images/screenshots/ferese-bottom-panel.webp)
+2 -2
View File
@@ -12,7 +12,7 @@ Settings and `~/.config/ferese/config.kdl` are two ways to edit the same configu
The shared settings have a defined scope. Ferese can coordinate the surfaces it draws and the transitions it manages; it does not control every animation an application draws inside its own window. That distinction matters when describing a consistent desktop: consistency between Ferese’s components should not be confused with taking over application behaviour. The shared settings have a defined scope. Ferese can coordinate the surfaces it draws and the transitions it manages; it does not control every animation an application draws inside its own window. That distinction matters when describing a consistent desktop: consistency between Ferese’s components should not be confused with taking over application behaviour.
[![Rosé Pine dark desktop with Settings, Control Center and a file manager.](images/screenshots/rose-pine-dark.webp)](images/screenshots/rose-pine-dark.webp) [![Ferese Appearance settings with six paired light and dark themes.](images/screenshots/ferese-appearance.webp)](images/screenshots/ferese-appearance.webp)
## Different work needs different arrangements ## Different work needs different arrangements
@@ -22,7 +22,7 @@ Ferese supports both, with the layout selected per workspace. Floating windows a
Even within scrolling, moving focus does not always need to move the desktop. Ferese’s minimal focus strategy leaves a fully visible column where it is and scrolls only far enough to reveal a hidden edge. Other strategies centre the focused column or arrange columns into viewport-sized pages. These choices affect how much the desktop moves while you work, so they belong in the layout’s behaviour rather than being treated as visual decoration. Even within scrolling, moving focus does not always need to move the desktop. Ferese’s minimal focus strategy leaves a fully visible column where it is and scrolls only far enough to reveal a hidden edge. Other strategies centre the focused column or arrange columns into viewport-sized pages. These choices affect how much the desktop moves while you work, so they belong in the layout’s behaviour rather than being treated as visual decoration.
[![Ferese Blue overview with a terminal, Settings and three workspace previews.](images/screenshots/ferese-blue-overview.webp)](images/screenshots/ferese-blue-overview.webp) [![Ferese Overview with open windows and three workspace previews.](images/screenshots/ferese-overview.webp)](images/screenshots/ferese-overview.webp)
## Movement that responds to what you do next ## Movement that responds to what you do next
+68 -13
View File
@@ -28,7 +28,7 @@ md = MarkdownIt('commonmark', {'html': False}).enable('table')
if OUTPUT.exists(): if OUTPUT.exists():
shutil.rmtree(OUTPUT) shutil.rmtree(OUTPUT)
OUTPUT.mkdir(parents=True) OUTPUT.mkdir(parents=True)
for name in ('index.html', 'styles.css', 'app.js'): for name in ('index.html', 'home.css', 'handbook.css', 'styles.css', 'app.js'):
shutil.copy2(ROOT / 'site' / name, OUTPUT / name) shutil.copy2(ROOT / 'site' / name, OUTPUT / name)
(OUTPUT / 'assets').mkdir(exist_ok=True) (OUTPUT / 'assets').mkdir(exist_ok=True)
shutil.copytree(ROOT / 'site/assets', OUTPUT / 'assets', dirs_exist_ok=True) shutil.copytree(ROOT / 'site/assets', OUTPUT / 'assets', dirs_exist_ok=True)
@@ -91,25 +91,80 @@ for page_number, (slug, title, source) in enumerate(PAGES):
search_index.extend(sections) search_index.extend(sections)
body = md.renderer.render(tokens, md.options, {}) body = md.renderer.render(tokens, md.options, {})
body = body.replace('<table>', '<div class="table-scroll" tabindex="0" role="region" aria-label="Reference table"><table>').replace('</table>', '</table></div>') body = body.replace('<table>', '<div class="table-scroll" tabindex="0" role="region" aria-label="Reference table"><table>').replace('</table>', '</table></div>')
navigation = ''.join(f'<a href="{s}.html"' + (' aria-current="page"' if s == slug else '') + f'>{escape(t)}</a>' for s, t, _ in PAGES if s != 'animation-model') navigation = ''.join(f'<a href="{s}.html"' + (' aria-current="page"' if s == slug else '') + f'>{escape(t)}</a>' for s, t, _ in PAGES)
contents = ''.join(f'<a href="#{anchor}">{escape(heading)}</a>' for anchor, heading in toc) contents = ''.join(f'<a href="#{anchor}">{escape(heading)}</a>' for anchor, heading in toc)
pager = '' pager = ''
if page_number: if page_number:
prev = PAGES[page_number - 1] prev = PAGES[page_number - 1]
pager += f'<a href="{prev[0]}.html"><small>PREVIOUS</small>← {escape(prev[1])}</a>' pager += f'<a class="pager-previous" href="{prev[0]}.html"><small>Previous</small>← {escape(prev[1])}</a>'
if page_number + 1 < len(PAGES): if page_number + 1 < len(PAGES):
nxt = PAGES[page_number + 1] nxt = PAGES[page_number + 1]
pager += f'<a href="{nxt[0]}.html"><small>NEXT</small>{escape(nxt[1])} →</a>' pager += f'<a class="pager-next" href="{nxt[0]}.html"><small>Next</small>{escape(nxt[1])} →</a>'
mobile_contents = (
f'<details class="mobile-contents"><summary>On this page</summary><nav aria-label="Page sections">{contents}</nav></details>'
if contents else ''
)
doc = f'''<!doctype html> doc = f'''<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"> <html lang="en">
<meta name="theme-color" content="#10151c"><title>{escape(title)} — Ferese handbook</title><meta name="description" content="{escape(title)} in the Ferese handbook: setup, configuration, and guides for your Wayland desktop."> <head>
<link rel="icon" href="../assets/branding/ferese.svg" type="image/svg+xml"><link rel="icon" href="../assets/favicon.ico" sizes="16x16 32x32 48x48"><link rel="icon" href="../assets/favicon-32.png" type="image/png" sizes="32x32"><link rel="stylesheet" href="../styles.css"><script src="../app.js" defer></script></head> <meta charset="utf-8">
<body class="docs-page"><a class="skip" href="#main">Skip to content</a> <meta name="viewport" content="width=device-width, initial-scale=1">
<header class="site-header"><div class="header-inner"><a class="brand" href="../" aria-label="Ferese home"><img class="brand-icon" src="../assets/branding/ferese.svg" width="950" height="950" alt=""><span class="brand-name">Ferese</span></a><nav aria-label="Main navigation"><a href="../">Overview</a><a href="./" aria-current="page">Documentation</a><a href="{REPO}">GitHub <svg class="link-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M7 7h10v10"/></svg></a></nav></div></header> <meta name="theme-color" content="#111821">
<div class="docs-layout"><aside class="docs-sidebar"><div class="docs-search" hidden><label class="sr-only" for="docs-search">Search the handbook</label><input id="docs-search" type="search" placeholder="Search the handbook…" autocomplete="off" aria-controls="search-results"><div class="search-results" id="search-results" hidden></div><p class="sr-only" id="search-status" role="status"></p></div><details open><summary>FERESE HANDBOOK</summary><nav aria-label="Documentation">{navigation}</nav></details><div class="sidebar-links"><a href="{REPO}/issues">Report an issue <svg class="link-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M7 7h10v10"/></svg></a><a href="../">Back to Ferese ←</a></div></aside> <title>{escape(title)} — Ferese handbook</title>
<main class="docs-article" id="main"><div class="breadcrumb"><a href="./">Handbook</a><span aria-hidden="true">/</span><span>{escape(title)}</span></div><article class="prose">{body}</article><a class="edit-link" href="{REPO}/blob/main/{source.relative_to(ROOT)}">View this guide on GitHub <svg class="link-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M7 7h10v10"/></svg></a><nav class="docs-pager" aria-label="Previous and next guide">{pager}</nav></main> <meta name="description" content="{escape(title)} in the Ferese handbook: setup, configuration, and guides for your Wayland desktop.">
<aside class="docs-toc" aria-label="On this page">{'<p>ON THIS PAGE</p><nav>' + contents + '</nav>' if contents else ''}</aside></div> <link rel="icon" href="../assets/branding/ferese.svg" type="image/svg+xml">
<footer class="site-footer page-width"><a class="brand" href="../" aria-label="Ferese home"><img class="brand-icon" src="../assets/branding/ferese.svg" width="950" height="950" alt=""></a><p>A Wayland desktop with scrolling layouts.</p><a href="{REPO}">Built in the open <svg class="link-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M7 7h10v10"/></svg></a></footer></body></html>''' <link rel="icon" href="../assets/favicon.ico" sizes="16x16 32x32 48x48">
<link rel="icon" href="../assets/favicon-32.png" type="image/png" sizes="32x32">
<link rel="stylesheet" href="../styles.css">
<link rel="stylesheet" href="../handbook.css">
<script src="../app.js" defer></script>
</head>
<body class="docs-page">
<svg class="icon-definitions" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><defs>
<symbol id="i-arrow" viewBox="0 0 24 24"><path d="M5 12h14M13 6l6 6-6 6"/></symbol>
<symbol id="i-external" viewBox="0 0 24 24"><path d="M7 17 17 7M7 7h10v10"/></symbol>
</defs></svg>
<a class="skip" href="#main">Skip to content</a>
<header class="site-header">
<div class="header-inner page-width">
<a class="brand" href="../" aria-label="Ferese home"><img src="../assets/branding/ferese.svg" width="34" height="34" alt=""><span>Ferese</span></a>
<nav aria-label="Main navigation"><a href="../#make-room">The desktop</a><a href="../#appearance">Appearance</a><a href="./" aria-current="page">Handbook</a></nav>
<div class="header-actions"><a class="small-button" href="installation.html">Get Ferese</a></div>
</div>
</header>
<div class="docs-layout page-width">
<aside class="docs-sidebar" aria-label="Handbook navigation">
<div class="docs-search" hidden>
<label class="sr-only" for="docs-search">Search the handbook</label>
<input id="docs-search" type="search" placeholder="Search the handbook…" autocomplete="off" aria-controls="search-results">
<div class="search-results" id="search-results" hidden></div>
<p class="sr-only" id="search-status" role="status"></p>
</div>
<details class="handbook-navigation" open>
<summary>Browse the handbook <svg class="icon" aria-hidden="true"><use href="#i-arrow"/></svg></summary>
<nav aria-label="Documentation">{navigation}</nav>
</details>
<div class="sidebar-links">
<a href="{REPO}/issues">Report an issue <svg class="icon" aria-hidden="true"><use href="#i-external"/></svg></a>
<a href="../">Back to Ferese</a>
</div>
</aside>
<main class="docs-article" id="main">
<div class="breadcrumb"><a href="./">Handbook</a><span aria-hidden="true">/</span><span>{escape(title)}</span></div>
{mobile_contents}
<article class="prose">{body}</article>
<a class="edit-link" href="{REPO}/blob/main/{source.relative_to(ROOT)}">View this guide on GitHub <svg class="icon" aria-hidden="true"><use href="#i-external"/></svg></a>
<nav class="docs-pager" aria-label="Previous and next guide">{pager}</nav>
</main>
<aside class="docs-toc" aria-label="On this page">{'<p>On this page</p><nav>' + contents + '</nav>' if contents else ''}</aside>
</div>
<footer class="site-footer page-width">
<a class="brand" href="../" aria-label="Ferese home"><img src="../assets/branding/ferese.svg" width="28" height="28" alt=""><span>Ferese</span></a>
<span>Built in the open for Linux.</span>
<nav aria-label="Footer navigation"><a href="./">Handbook</a><a href="{REPO}">GitHub <svg class="icon" aria-hidden="true"><use href="#i-external"/></svg></a></nav>
</footer>
</body>
</html>'''
(OUTPUT / 'docs' / f'{slug}.html').write_text(doc) (OUTPUT / 'docs' / f'{slug}.html').write_text(doc)
(OUTPUT / 'docs/search-index.json').write_text(json.dumps(search_index, ensure_ascii=False)) (OUTPUT / 'docs/search-index.json').write_text(json.dumps(search_index, ensure_ascii=False))
print(f'Built website and {len(PAGES)} handbook pages at {OUTPUT}') print(f'Built website and {len(PAGES)} handbook pages at {OUTPUT}')
+5 -2
View File
@@ -15,7 +15,9 @@ python3 -m http.server 8080 --bind 127.0.0.1 --directory build/site
Open http://localhost:8080 for the homepage or http://localhost:8080/docs/ for the Open http://localhost:8080 for the homepage or http://localhost:8080/docs/ for the
handbook. Rebuild and refresh the browser after changing the site sources or guides. handbook. Rebuild and refresh the browser after changing the site sources or guides.
- `site/index.html` and `site/styles.css`: homepage and shared visual design. - `site/index.html` and `site/home.css`: homepage and desktop screenshots.
- `site/styles.css`: shared dark appearance, typography and navigation.
- `site/handbook.css`: handbook layout, search and reference tables.
- `site/content/index.md`: handbook introduction. - `site/content/index.md`: handbook introduction.
- `docs/*.md`: guides; published pages are listed in `scripts/build-site.py`. - `docs/*.md`: guides; published pages are listed in `scripts/build-site.py`.
- `scripts/build-site.py`: renders Markdown, resolves links, generates section - `scripts/build-site.py`: renders Markdown, resolves links, generates section
@@ -60,4 +62,5 @@ when no custom wallpaper is set. Settings keeps both defaults available below
the current wallpaper preview. the current wallpaper preview.
Screenshots live in `docs/images/screenshots` and are shared by the README and Screenshots live in `docs/images/screenshots` and are shared by the README and
website. They use lossless WebP at the original 2880×1800 resolution. website. Full captures retain their original 2880×1800 resolution, while the
homepage uses smaller WebP versions for narrower screens.
+10
View File
@@ -1,4 +1,14 @@
// Progressive enhancement for the handbook. Navigation and content work without JS. // Progressive enhancement for the handbook. Navigation and content work without JS.
const handbookNavigation = document.querySelector('.handbook-navigation');
if (handbookNavigation) {
const compactLayout = matchMedia('(max-width: 900px)');
const updateNavigation = () => { handbookNavigation.open = !compactLayout.matches; };
updateNavigation();
compactLayout.addEventListener('change', updateNavigation);
handbookNavigation.addEventListener('click', (event) => {
if (compactLayout.matches && event.target.closest('nav a')) handbookNavigation.open = false;
});
}
const search = document.querySelector("#docs-search"); const search = document.querySelector("#docs-search");
const results = document.querySelector("#search-results"); const results = document.querySelector("#search-results");
const status = document.querySelector("#search-status"); const status = document.querySelector("#search-status");
+128
View File
@@ -0,0 +1,128 @@
.docs-layout {
display: grid;
grid-template-columns: 195px minmax(0, 1fr) 165px;
gap: 38px;
align-items: start;
padding-block: 48px 90px;
}
.docs-sidebar, .docs-toc {
position: sticky;
top: 110px;
max-height: calc(100dvh - 145px);
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: var(--line) transparent;
}
.docs-sidebar { z-index: 2; }
.docs-sidebar summary { list-style: none; color: var(--muted); font-size: 12px; font-weight: 550; margin: 0 0 14px; }
.docs-sidebar summary::-webkit-details-marker { display: none; }
.docs-sidebar summary .icon { display: none; }
.docs-sidebar nav { display: grid; gap: 4px; }
.docs-sidebar nav a {
display: block;
padding: 9px 12px;
color: var(--muted);
border-radius: 8px;
font-size: 13px;
line-height: 1.5;
transition: background .15s, color .15s;
}
.docs-sidebar nav a:hover { background: var(--soft); color: var(--ink); }
.docs-sidebar nav a[aria-current=page] { background: #3d7be618; color: var(--accent); font-weight: 550; }
.sidebar-links { display: grid; gap: 14px; margin-top: 25px; padding: 21px 12px 0; border-top: 1px solid var(--line); }
.sidebar-links a { display: flex; align-items: center; gap: 6px; color: var(--muted); font-size: 11px; }
.sidebar-links a:hover { color: var(--ink); }
.sidebar-links .icon { width: 12px; height: 12px; }
.docs-article { min-width: 0; }
.breadcrumb { display: flex; align-items: center; gap: 9px; margin-bottom: 20px; color: var(--muted); font-size: 11px; line-height: 1.6; }
.breadcrumb a:hover { color: var(--accent); }
.prose { min-width: 0; font-size: 15px; line-height: 1.95; overflow-wrap: anywhere; }
.prose h1 { margin: 0 0 24px; color: var(--ink); font-size: 44px; font-weight: 560; line-height: 1.15; letter-spacing: -1.7px; text-wrap: balance; }
.prose > p { margin: 18px 0; color: var(--muted); }
.prose > p:first-of-type { font-size: 17px; line-height: 1.85; }
.prose h2 { margin: 48px 0 18px; padding-top: 27px; border-top: 1px solid var(--line); font-size: 27px; font-weight: 550; letter-spacing: -.8px; line-height: 1.25; text-wrap: balance; }
.prose h3 { margin: 31px 0 12px; font-size: 19px; font-weight: 550; letter-spacing: -.3px; line-height: 1.4; }
.prose h4 { margin: 25px 0 10px; font-size: 16px; font-weight: 550; }
.prose a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
.prose a:hover { color: var(--ink); }
.prose strong { color: var(--ink); font-weight: 550; }
.prose a:has(img) { display: block; max-width: 100%; line-height: 0; border: 1px solid var(--line); border-radius: 15px; overflow: hidden; }
.prose img { display: block; width: 100%; height: auto; }
.prose code { font: .85em var(--mono); color: #dbe7fa; padding: 2px 5px; background: var(--raised); border-radius: 4px; overflow-wrap: anywhere; }
.prose pre { position: relative; margin: 25px 0; padding: 43px 18px 18px; max-width: 100%; overflow-x: auto; border: 1px solid var(--line); border-radius: 12px; background: var(--soft); color: #dbe7fa; font: 12px/1.85 var(--mono); }
.prose pre code { padding: 0; background: none; white-space: pre; overflow-wrap: normal; font: inherit; }
.code-copy { position: absolute; top: 9px; right: 10px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 6px; background: var(--raised); color: var(--muted); font-size: 10px; }
.code-copy:hover { color: var(--ink); border-color: #ffffff25; }
.prose ul, .prose ol { padding-left: 22px; color: var(--muted); }
.prose li { margin-bottom: 9px; }
.prose li::marker { color: var(--muted); }
.prose li > p { margin-block: 8px; }
.prose blockquote { margin: 26px 0; padding: 4px 20px; border-left: 2px solid var(--accent); background: var(--soft); border-radius: 0 10px 10px 0; color: var(--muted); }
.prose blockquote p { margin: 12px 0; }
.prose hr { border: 0; border-top: 1px solid var(--line); margin-block: 35px; }
.table-scroll { max-width: 100%; margin: 25px 0; overflow-x: auto; border: 1px solid var(--line); border-radius: 12px; }
.prose table { width: 100%; border-collapse: collapse; color: var(--muted); font-size: 12px; line-height: 1.8; }
.prose th { text-align: left; color: var(--ink); background: var(--soft); font-weight: 550; white-space: nowrap; }
.prose td, .prose th { padding: 13px 15px; border-bottom: 1px solid var(--line); min-width: 110px; vertical-align: top; }
.prose td:first-child { min-width: 145px; }
.prose tr:last-child td { border-bottom: 0; }
.docs-toc > p { margin: 0 0 15px; color: var(--muted); font-size: 11px; font-weight: 550; }
.docs-toc nav { display: grid; gap: 12px; padding-left: 14px; border-left: 1px solid var(--line); }
.docs-toc a { color: var(--muted); font-size: 11px; line-height: 1.65; }
.docs-toc a:hover { color: var(--accent); }
.mobile-contents { display: none; }
.edit-link { display: inline-flex; align-items: center; gap: 6px; margin-top: 28px; color: var(--muted); font-size: 11px; }
.edit-link:hover { color: var(--accent); }
.edit-link .icon { width: 12px; height: 12px; }
.docs-pager { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-top: 40px; }
.docs-pager a { min-width: 0; padding: 18px; border: 1px solid var(--line); border-radius: 12px; font-size: 13px; line-height: 1.6; transition: background .15s, border-color .15s; }
.docs-pager a:hover { background: var(--soft); border-color: #ffffff25; }
.docs-pager .pager-next { grid-column: 2; text-align: right; }
.docs-pager small { display: block; margin-bottom: 5px; color: var(--muted); font-size: 10px; }
.docs-search { position: relative; margin-bottom: 26px; }
.docs-search input { display: block; width: 100%; padding: 11px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--soft); color: var(--ink); font-size: 12px; }
.docs-search input::placeholder { color: var(--muted); opacity: 1; }
.search-results { position: absolute; z-index: 10; top: calc(100% + 8px); left: 0; width: min(560px, calc(100vw - 80px)); max-height: 60dvh; overflow: auto; border: 1px solid #ffffff25; border-radius: 12px; background: var(--raised); box-shadow: 0 20px 50px #0006; }
.search-results a { display: block; padding: 16px; border-bottom: 1px solid var(--line); }
.search-results a:last-child { border-bottom: 0; }
.search-results a:hover { background: #ffffff06; }
.search-results strong { display: block; color: var(--accent); font-size: 13px; font-weight: 550; }
.search-results span { display: block; margin-top: 5px; color: var(--muted); font-size: 11px; line-height: 1.7; }
.search-results > p { margin: 0; padding: 16px; color: var(--muted); font-size: 12px; line-height: 1.7; }
.docs-sidebar:has(.search-results:not([hidden])) { overflow: visible; }
@media (max-width: 1100px) {
.docs-layout { grid-template-columns: 185px minmax(0, 1fr); gap: 36px; }
.docs-toc { display: none; }
.mobile-contents { display: block; margin-bottom: 25px; border-bottom: 1px solid var(--line); padding-bottom: 14px; }
.mobile-contents summary { cursor: pointer; color: var(--muted); font-size: 12px; }
.mobile-contents nav { display: grid; gap: 11px; margin-top: 15px; }
.mobile-contents a { color: var(--muted); font-size: 12px; line-height: 1.5; }
.mobile-contents a:hover { color: var(--accent); }
}
@media (max-width: 900px) {
.docs-layout { display: block; padding-block: 30px 70px; }
.docs-sidebar { position: static; max-height: none; overflow: visible; margin-bottom: 36px; padding: 16px; border: 1px solid var(--line); border-radius: 13px; background: var(--soft); }
.docs-search { margin-bottom: 15px; }
.docs-search input { background: var(--page); }
.docs-sidebar summary { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0; cursor: pointer; font-size: 13px; color: var(--ink); }
.docs-sidebar summary .icon { display: block; width: 14px; height: 14px; transform: rotate(90deg); }
.docs-sidebar details[open] summary .icon { transform: rotate(-90deg); }
.docs-sidebar nav { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 15px; }
.docs-sidebar nav a { font-size: 12px; }
.sidebar-links { display: none; }
.search-results { width: 100%; }
.prose h1 { font-size: 40px; letter-spacing: -1.3px; }
}
@media (max-width: 700px) {
.docs-layout { padding-block: 24px 60px; }
.docs-sidebar { margin-bottom: 30px; }
.breadcrumb { flex-wrap: wrap; gap: 7px; margin-bottom: 16px; }
.prose { font-size: 15px; line-height: 1.9; }
.prose > p:first-of-type { font-size: 16px; }
.prose h1 { font-size: 35px; letter-spacing: -1px; }
.prose h2 { margin-top: 37px; padding-top: 23px; font-size: 25px; }
.prose h3 { font-size: 18px; }
.prose pre { padding-inline: 14px; font-size: 11px; }
.docs-pager { gap: 10px; }
.docs-pager a { padding: 14px 12px; font-size: 12px; }
}
+73
View File
@@ -0,0 +1,73 @@
.hero { text-align: center; padding-top: 64px; }
h1 { font-size: clamp(45px, 6.1vw, 80px); font-weight: 590; letter-spacing: -.055em; line-height: 1.08; margin: 0; text-wrap: balance; }
.hero-description { font-size: 18px; line-height: 1.6; max-width: 555px; margin: 22px auto 0; color: var(--muted); text-wrap: balance; }
.hero-actions { display: flex; align-items: center; justify-content: center; gap: 28px; margin-top: 27px; }
.primary-button { display: inline-flex; align-items: center; gap: 16px; background: var(--button); color: #fff; padding: 13px 22px; border-radius: 30px; font-size: 13px; font-weight: 500; transition: background .2s; }
.primary-button .icon { width: 17px; height: 17px; }
.down { transform: rotate(90deg); }
.desktop-stage { min-width: 0; max-width: 100%; margin-top: 47px; scroll-margin-top: 100px; }
.desktop-capture { min-width: 0; max-width: 100%; border: 1px solid var(--line); border-radius: 24px; overflow: hidden; background: var(--soft); box-shadow: 0 28px 60px -38px #000000a0; }
.desktop-capture img { display: block; width: 100%; height: auto; aspect-ratio: 8/5; }
.layout-section { padding-block: 132px 115px; }
.section-heading { display: flex; align-items: center; justify-content: space-between; gap: 55px; margin-bottom: 39px; }
h2 { font-size: 48px; line-height: 1.12; font-weight: 560; letter-spacing: -2px; margin: 0; text-wrap: balance; }
.section-heading > p { max-width: 405px; margin: 0; font-size: 15px; line-height: 1.85; color: var(--muted); text-wrap: pretty; }
.feature-capture { min-width: 0; max-width: 100%; margin: 0; }
.feature-capture > a, .detail-capture { display: block; min-width: 0; max-width: 100%; border: 1px solid var(--line); border-radius: 22px; overflow: hidden; background: var(--page); line-height: 0; }
.feature-capture img, .detail-capture img { display: block; width: 100%; height: auto; }
.feature-capture figcaption { margin-top: 19px; color: var(--muted); font-size: 12px; text-align: center; }
.details-section { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; padding-top: 115px; }
.layout-details { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; margin-top: 48px; }
.gallery-link { padding-top: 44px; text-align: center; }
.detail-feature { min-width: 0; }
.detail-capture { border-radius: 17px; }
.detail-feature h3 { margin: 25px 0 12px; font-size: 25px; font-weight: 550; letter-spacing: -.8px; }
.detail-feature p { max-width: 445px; margin: 0; color: var(--muted); font-size: 14px; line-height: 1.8; text-wrap: pretty; }
.appearance-section { padding-block: 93px 83px; background: var(--soft); }
.centered-heading { text-align: center; max-width: 650px; margin: 0 auto 40px; }
.centered-heading p { font-size: 15px; line-height: 1.8; color: var(--muted); max-width: 465px; margin: 20px auto 0; text-wrap: balance; }
.start-section { text-align: center; padding-block: 115px 104px; }
.start-logo { width: 74px; height: 74px; margin: 0 auto 23px; }
.start-section h2 { font-size: 44px; }
.start-section p { font-size: 15px; line-height: 1.8; color: var(--muted); margin: 20px auto 0; max-width: 470px; text-wrap: balance; }
@media (max-width: 1100px) {
.section-heading { gap: 40px; }
.section-heading > p { max-width: 370px; }
}
@media (max-width: 900px) {
.section-heading > p { max-width: 310px; }
.section-heading h2 { font-size: 40px; }
}
@media (max-width: 700px) {
.hero { padding-top: 52px; }
h1 { font-size: clamp(40px, 7.5vw, 54px); letter-spacing: -2px; }
.hero-description { font-size: 15px; line-height: 1.7; max-width: 400px; margin-top: 20px; }
.hero-actions { gap: 24px; margin-top: 24px; }
.primary-button { font-size: 12px; padding: 12px 19px; }
.desktop-stage { margin-top: 36px; }
.desktop-capture { border-radius: 18px; }
.layout-section { padding-block: 86px 75px; }
.section-heading { flex-direction: column; align-items: flex-start; gap: 21px; margin-bottom: 30px; }
.section-heading h2 { font-size: 36px; letter-spacing: -1.4px; }
.section-heading > p { max-width: 480px; font-size: 14px; line-height: 1.8; }
.appearance-section { padding-block: 68px 57px; }
.centered-heading { margin-bottom: 28px; }
.centered-heading h2 { font-size: 36px; letter-spacing: -1.5px; }
.centered-heading p { font-size: 14px; margin-top: 18px; max-width: 370px; }
.feature-capture > a { border-radius: 17px; }
.feature-capture figcaption { font-size: 10px; margin-top: 13px; }
.details-section { grid-template-columns: 1fr; gap: 42px; padding-top: 70px; }
.layout-details { grid-template-columns: 1fr; gap: 42px; margin-top: 36px; }
.gallery-link { padding-top: 32px; }
.detail-feature h3 { font-size: 24px; margin-top: 21px; }
.detail-feature p { font-size: 14px; max-width: 480px; }
.start-section { padding-block: 78px 70px; }
.start-logo { width: 62px; height: 62px; margin-bottom: 22px; }
.start-section h2 { font-size: 35px; letter-spacing: -1.5px; }
.start-section p { font-size: 14px; max-width: 370px; margin-top: 19px; }
}
@media (max-width: 380px) {
.hero { padding-top: 44px; }
h1 { font-size: 37px; letter-spacing: -1.7px; }
.hero-description { font-size: 14px; }
}
+65 -110
View File
@@ -1,129 +1,84 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#10151c" /> <meta name="theme-color" content="#111821">
<meta name="description" content="Ferese is a configurable Wayland desktop." /> <meta name="description" content="Ferese is a configurable Wayland desktop for Linux. Explore its window layouts, shared themes, and editable panel.">
<meta property="og:title" content="Ferese — Wayland desktop" /> <meta property="og:title" content="Ferese — A little more room.">
<meta property="og:description" content="A configurable Wayland desktop." /> <meta property="og:description" content="A configurable Wayland desktop for Linux that brings your windows and everyday controls together.">
<meta property="og:type" content="website" /> <meta property="og:type" content="website">
<meta property="og:image" content="https://ferese-wm.github.io/ferese/assets/screenshots/ferese-blue-dark.webp" /> <meta property="og:image" content="https://ferese-wm.github.io/ferese/assets/screenshots/ferese-media.webp">
<meta name="twitter:card" content="summary_large_image" /> <meta property="og:image:width" content="2880">
<title>Ferese — Wayland desktop</title> <meta property="og:image:height" content="1800">
<link rel="icon" href="assets/branding/ferese.svg" type="image/svg+xml" /> <meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="assets/favicon.ico" sizes="16x16 32x32 48x48" /> <title>Ferese — A little more room.</title>
<link rel="icon" href="assets/favicon-32.png" type="image/png" sizes="32x32" /> <link rel="icon" href="assets/branding/ferese.svg" type="image/svg+xml">
<link rel="stylesheet" href="styles.css?v=figtree" /> <link rel="icon" href="assets/favicon.ico" sizes="16x16 32x32 48x48">
<link rel="icon" href="assets/favicon-32.png" type="image/png" sizes="32x32">
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="home.css">
</head> </head>
<body> <body>
<svg class="icon-definitions" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><defs>
<symbol id="i-arrow" viewBox="0 0 24 24"><path d="M5 12h14M13 6l6 6-6 6"/></symbol>
<symbol id="i-external" viewBox="0 0 24 24"><path d="M7 17 17 7M7 7h10v10"/></symbol>
</defs></svg>
<a class="skip" href="#main">Skip to content</a> <a class="skip" href="#main">Skip to content</a>
<header class="site-header"> <header class="site-header">
<div class="header-inner"> <div class="header-inner page-width">
<a class="brand" href="./" aria-label="Ferese home"> <a class="brand" href="#main" aria-label="Ferese home"><img src="assets/branding/ferese.svg" width="34" height="34" alt=""><span>Ferese</span></a>
<img class="brand-icon" src="assets/branding/ferese.svg" width="950" height="950" alt="" /> <nav aria-label="Main navigation"><a href="#make-room">The desktop</a><a href="#appearance">Appearance</a><a href="docs/">Handbook</a></nav>
<span class="brand-name">Ferese</span> <div class="header-actions"><a class="small-button" href="docs/installation.html">Get Ferese</a></div>
</a>
<nav aria-label="Main navigation">
<a href="./" aria-current="page">Overview</a><a href="docs/screenshots.html">Screenshots</a><a
href="docs/">Documentation</a><a href="https://github.com/ferese-wm/ferese">GitHub <svg class="link-arrow"
viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M7 17 17 7M7 7h10v10" />
</svg></a>
</nav>
</div> </div>
</header> </header>
<main id="main" class="simple-home"> <main id="main">
<section class="product-intro page-width"> <section class="hero page-width" aria-labelledby="hero-title">
<img class="intro-icon" src="assets/branding/ferese.svg" width="950" height="950" alt="" /> <h1 id="hero-title">A little more room.</h1>
<h1 class="product-tagline"> <p class="hero-description">A configurable Wayland desktop for Linux that brings your windows and everyday controls together.</p>
A configurable Wayland desktop. <div class="hero-actions"><a class="primary-button" href="docs/installation.html">Get Ferese <svg class="icon"><use href="#i-arrow"/></svg></a><a class="inline-link" href="#desktop-preview">Take a look <svg class="icon down"><use href="#i-arrow"/></svg></a></div>
</h1> <div class="desktop-stage" id="desktop-preview">
<p class="product-description"> <div class="desktop-capture" id="desktop-capture">
Ferese combines a window manager and desktop shell <img id="desktop-capture-image" src="assets/screenshots/ferese-media.webp" srcset="assets/screenshots/ferese-media-960.webp 960w, assets/screenshots/ferese-media-1440.webp 1440w, assets/screenshots/ferese-media.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc(100vw - 80px), 1120px" width="2880" height="1800" alt="The Ferese desktop with a translucent Now Playing popup showing Spotify artwork and playback controls over the blue and violet city wallpaper." fetchpriority="high">
with one configuration. </div>
</p>
<div class="product-links">
<a class="button" href="docs/installation.html">Install Ferese</a>
<a class="button secondary" href="docs/">Documentation</a>
<a class="source-link" href="https://github.com/ferese-wm/ferese">Source code <svg class="link-arrow"
viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M7 17 17 7M7 7h10v10" />
</svg></a>
</div> </div>
</section> </section>
<figure class="product-screenshot page-width"> <section class="layout-section page-width" id="make-room" aria-labelledby="layout-title">
<a href="assets/screenshots/ferese-blue-dark.webp" aria-label="View the full-resolution Ferese desktop screenshot"> <div class="section-heading"><h2 id="layout-title">Space for the way<br>you think.</h2><p>Let your windows scroll into place, or share the screen in a tree layout. Open Overview to see your workspaces and find the window you need.</p></div>
<img src="assets/screenshots/ferese-blue-dark.webp" width="2880" height="1800" <figure class="feature-capture overview-capture">
alt="Ferese Blue dark desktop with Appearance settings" fetchpriority="high" /> <a href="assets/screenshots/ferese-overview.webp" target="_blank" rel="noopener" aria-label="View the Overview screenshot at full resolution"><img src="assets/screenshots/ferese-overview-1440.webp" srcset="assets/screenshots/ferese-overview-960.webp 960w, assets/screenshots/ferese-overview-1440.webp 1440w, assets/screenshots/ferese-overview.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc(100vw - 80px), 1120px" width="2880" height="1800" alt="Ferese Overview showing three workspaces and open terminal and reading windows over the city wallpaper." loading="lazy" decoding="async"></a>
</a> <figcaption>Every workspace, in view.</figcaption>
<figcaption>
Ferese Blue dark with Appearance settings and the default wallpaper.
</figcaption>
</figure> </figure>
<section class="product-features page-width" aria-label="Features"> <div class="layout-details">
<article> <article class="detail-feature">
<h2>Window layouts</h2> <a class="detail-capture" href="assets/screenshots/ferese-window-layout.webp" target="_blank" rel="noopener" aria-label="View the window layout screenshot at full resolution"><img src="assets/screenshots/ferese-window-layout-960.webp" srcset="assets/screenshots/ferese-window-layout-960.webp 960w, assets/screenshots/ferese-window-layout-1440.webp 1440w, assets/screenshots/ferese-window-layout.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc((100vw - 112px) / 2), 544px" width="2880" height="1800" alt="A terminal and reading window arranged side by side over the city wallpaper." loading="lazy" decoding="async"></a>
<p> <h3>Keep your work together.</h3><p>Give each window room, with your reading and tools side by side.</p>
Scrolling columns, tree tiling, floating windows, and a workspace
overview. Use keyboard shortcuts or gestures to move around.
</p>
<a href="docs/configuration.html#layout">Configure layouts →</a>
</article> </article>
<article> <article class="detail-feature">
<h2>Desktop tools</h2> <a class="detail-capture" href="assets/screenshots/ferese-workspace-preview.webp" target="_blank" rel="noopener" aria-label="View the workspace preview screenshot at full resolution"><img src="assets/screenshots/ferese-workspace-preview-960.webp" srcset="assets/screenshots/ferese-workspace-preview-960.webp 960w, assets/screenshots/ferese-workspace-preview-1440.webp 1440w, assets/screenshots/ferese-workspace-preview.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc((100vw - 112px) / 2), 544px" width="2880" height="1800" alt="Three workspace thumbnails above a browser window, with the current workspace outlined in blue." loading="lazy" decoding="async"></a>
<p> <h3>Know where you left off.</h3><p>Hover over your workspaces for a preview of the windows in each one.</p>
A menu bar, Control Center, Settings, notifications, and desktop widgets.
</p>
<a href="docs/why-ferese.html">Explore Ferese →</a>
</article> </article>
<article> </div>
<h2>Appearance</h2> </section>
<p> <section class="appearance-section" id="appearance" aria-labelledby="appearance-title"><div class="page-width">
Choose your theme, wallpaper, and colors through Settings or a KDL config, and see changes as you make them. <div class="centered-heading"><h2 id="appearance-title">One look. Everywhere.</h2><p>Choose your colours and shape your panel. A shared theme brings every part of Ferese together.</p></div>
</p> <figure class="feature-capture appearance-capture">
<a href="docs/configuration.html#appearance">Customize Ferese →</a> <a href="assets/screenshots/ferese-appearance.webp" target="_blank" rel="noopener" aria-label="View the Appearance screenshot at full resolution"><img src="assets/screenshots/ferese-appearance-1440.webp" srcset="assets/screenshots/ferese-appearance-960.webp 960w, assets/screenshots/ferese-appearance-1440.webp 1440w, assets/screenshots/ferese-appearance.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc(100vw - 80px), 1120px" width="2880" height="1800" alt="Ferese Appearance settings showing six themes with paired light and dark colours." loading="lazy" decoding="async"></a>
</figure>
</div></section>
<section class="details-section page-width" aria-label="Panel and media features">
<article class="detail-feature">
<a class="detail-capture" href="assets/screenshots/ferese-panel-settings.webp" target="_blank" rel="noopener" aria-label="View the Panel and Shell screenshot at full resolution"><img src="assets/screenshots/ferese-panel-settings-960.webp" srcset="assets/screenshots/ferese-panel-settings-960.webp 960w, assets/screenshots/ferese-panel-settings-1440.webp 1440w, assets/screenshots/ferese-panel-settings.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc((100vw - 104px) / 2), 548px" width="2880" height="1800" alt="Panel and Shell settings with a composition preview, top and bottom positions, and island surfaces." loading="lazy" decoding="async"></a>
<h3>Your panel, your way.</h3><p>Arrange items in groups, choose their surfaces, and put your panel at the top or bottom of the screen.</p>
</article>
<article class="detail-feature">
<a class="detail-capture" href="assets/screenshots/ferese-media.webp" target="_blank" rel="noopener" aria-label="View the music popup screenshot at full resolution"><img src="assets/screenshots/ferese-media-960.webp" srcset="assets/screenshots/ferese-media-960.webp 960w, assets/screenshots/ferese-media-1440.webp 1440w, assets/screenshots/ferese-media.webp 2880w" sizes="(max-width: 700px) calc(100vw - 40px), (max-width: 1200px) calc((100vw - 104px) / 2), 548px" width="2880" height="1800" alt="A translucent Now Playing popup with Spotify album artwork and playback controls." loading="lazy" decoding="async"></a>
<h3>A little closer to your music.</h3><p>See what's playing and pause or skip a track, right from your panel.</p>
</article> </article>
</section> </section>
<section class="product-motion page-width" aria-labelledby="continuum-heading"> <div class="gallery-link page-width"><a class="inline-link" href="docs/screenshots.html">See all desktop screenshots <svg class="icon"><use href="#i-arrow"/></svg></a></div>
<h2 id="continuum-heading">Continuum motion</h2> <section class="start-section page-width" aria-labelledby="start-title"><img class="start-logo" src="assets/branding/ferese.svg" width="74" height="74" alt=""><h2 id="start-title">Make yourself at home.</h2><p>Try Ferese in a nested session, or install it as your next desktop.</p><div class="hero-actions"><a class="primary-button" href="docs/installation.html">Get Ferese <svg class="icon"><use href="#i-arrow"/></svg></a><a class="inline-link" href="https://github.com/ferese-wm/ferese">Explore the source <svg class="icon"><use href="#i-external"/></svg></a></div></section>
<p>Continuum carries your gesture’s momentum into workspace transitions and keeps motion continuous when you change direction. Adjust spring response and speed to your taste, or enable reduced motion.</p>
<a href="docs/animation-model.html">Explore the animation model →</a>
</section>
<section class="product-getting-started page-width">
<h2>Getting started</h2>
<p>
The <a href="docs/installation.html">installation guide</a> covers
dependencies, login, updates, and recovery. You can also
<a href="docs/installation.html#preview-and-logs">preview Ferese</a>
inside an existing Wayland session before installing.
</p>
<p>
Share a display with recording and conferencing apps through Ferese’s
native screen-sharing portal. Choose what to share and stop at any time.
See <a href="docs/screen-sharing.html">screen sharing and recording</a>
for setup and limits.
</p>
<p>
Find <a href="docs/shortcuts.html">shortcuts and mouse actions</a> in the handbook. Development happens
<a href="https://github.com/ferese-wm/ferese">on GitHub</a>.
</p>
</section>
</main> </main>
<footer class="site-footer page-width"> <footer class="site-footer page-width"><a class="brand" href="#main" aria-label="Ferese home"><img src="assets/branding/ferese.svg" width="28" height="28" alt=""><span>Ferese</span></a><span>Built in the open for Linux.</span><nav aria-label="Footer navigation"><a href="docs/">Handbook</a><a href="https://github.com/ferese-wm/ferese">GitHub <svg class="icon"><use href="#i-external"/></svg></a></nav></footer>
<a class="brand" href="./" aria-label="Ferese home">
<img class="brand-icon" src="assets/branding/ferese.svg" width="950" height="950" alt="" />
</a>
<p>A Wayland desktop with scrolling layouts.</p>
<a href="docs/">Read the handbook <svg class="link-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M7 17 17 7M7 7h10v10" />
</svg></a>
</footer>
</body> </body>
</html> </html>
+90 -1140
View File
File diff suppressed because it is too large. Load diff