github pages
After Width: | Height: | Size: 894 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 597 KiB |
|
@ -0,0 +1,61 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" viewBox="0 0 400 400">
|
||||
<defs>
|
||||
<radialGradient id="radial-gradient" cx="-0.025" cy="1.021" r="1.434" gradientTransform="matrix(0.704, -0.71, 0.41, 0.407, -0.426, 0.588)" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#769ebe"/>
|
||||
<stop offset="1" stop-color="#93c3e8"/>
|
||||
</radialGradient>
|
||||
<filter id="矩形_9" x="32.5" y="12.5" width="355" height="355" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur"/>
|
||||
<feFlood flood-opacity="0.2"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<radialGradient id="radial-gradient-2" cx="-0.027" cy="1.043" r="1.428" gradientTransform="matrix(0.702, -0.712, 0.393, 0.387, -0.417, 0.62)" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#3a74a2"/>
|
||||
<stop offset="1" stop-color="#64a5d6"/>
|
||||
</radialGradient>
|
||||
<filter id="矩形_8" x="22.5" y="77.5" width="300" height="300" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-2"/>
|
||||
<feFlood flood-opacity="0.2"/>
|
||||
<feComposite operator="in" in2="blur-2"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<radialGradient id="radial-gradient-3" cx="-0.146" cy="1.148" r="1.171" gradientTransform="matrix(0.683, -0.73, 0.699, 0.654, -0.849, 0.291)" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#004e8c"/>
|
||||
<stop offset="1" stop-color="#0078d4"/>
|
||||
</radialGradient>
|
||||
<filter id="矩形_7" x="12.5" y="142.5" width="245" height="245" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-3"/>
|
||||
<feFlood flood-opacity="0.2"/>
|
||||
<feComposite operator="in" in2="blur-3"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="F" x="76" y="172" width="118" height="193" filterUnits="userSpaceOnUse">
|
||||
<feOffset dy="3" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="5" result="blur-4"/>
|
||||
<feFlood flood-opacity="0.161"/>
|
||||
<feComposite operator="in" in2="blur-4"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<clipPath id="clip-Web_1280_3">
|
||||
<rect width="400" height="400"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="Web_1280_3" data-name="Web 1280 – 3" clip-path="url(#clip-Web_1280_3)">
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#矩形_9)">
|
||||
<rect id="矩形_9-2" data-name="矩形 9" width="280" height="280" rx="5" transform="translate(70 50)" fill="url(#radial-gradient)"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#矩形_8)">
|
||||
<rect id="矩形_8-2" data-name="矩形 8" width="225" height="225" rx="5" transform="translate(60 115)" fill="url(#radial-gradient-2)"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#矩形_7)">
|
||||
<rect id="矩形_7-2" data-name="矩形 7" width="170" height="170" rx="5" transform="translate(50 180)" fill="url(#radial-gradient-3)"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#F)">
|
||||
<text id="F-2" data-name="F" transform="translate(91 317)" fill="#faf9f8" font-size="144" font-family="MicrosoftSansSerif, Microsoft Sans Serif"><tspan x="0" y="0">F</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 36 KiB |
|
@ -0,0 +1,81 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Fluent Reader</title>
|
||||
<link rel="icon" href="imgs/icon.png">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="logo-container">
|
||||
<img src="imgs/logo.svg" />
|
||||
<header>Fluent Reader</header>
|
||||
</div>
|
||||
<div class="light-container">
|
||||
<div class="screenshot elevate"><img src="imgs/light.png" /></div>
|
||||
<h1>Modern desktop RSS reader. Open-source.</h1>
|
||||
<p>
|
||||
Fluent Reader is a local, cross-platform news aggregator with a fresh look.
|
||||
Bring all your favorite sources with you and read distraction-free.
|
||||
</p>
|
||||
</div>
|
||||
<div class="features-container">
|
||||
<section class="elevate">
|
||||
<h2>Open & Organized.</h2>
|
||||
<p>
|
||||
Import your sources from an OPML file and resume reading right away.
|
||||
Easily organize sources with groups. Move between computers with full
|
||||
data backups, and share your sources with OPML exports.
|
||||
</p>
|
||||
<img class="elevate" src="imgs/opml.png" />
|
||||
</section>
|
||||
<section class="elevate">
|
||||
<h2>Read comfortably.</h2>
|
||||
<p>
|
||||
Enjoy your contents like never before with the built-in article view
|
||||
for RSS full text tailored to maximize focus. Source only comes with
|
||||
snippets? Configure to load webpage with Chromium-based webview
|
||||
or open externally by default.
|
||||
</p>
|
||||
<img class="elevate" src="imgs/read.png" />
|
||||
</section>
|
||||
<section class="elevate">
|
||||
<h2>Search. Filter.</h2>
|
||||
<p>
|
||||
Find anything you want with the power of regular expressions. Search in
|
||||
both titles and full contents of articles. Mark articles as starred,
|
||||
hidden, or unread and filter. Automatically categorize
|
||||
articles into customized feeds and pages (soon).
|
||||
</p>
|
||||
<img class="elevate center" src="imgs/search.png" />
|
||||
</section>
|
||||
<section class="elevate">
|
||||
<h2>Privacy first.</h2>
|
||||
<h3>All your data stays with you.</h3>
|
||||
<h3>All cookies cleared upon exit.</h3>
|
||||
<h3>XSS blocked in an isolated context.</h3>
|
||||
<h3>No personal information collected, ever.</h3>
|
||||
<h3>Behavior tracking limited.</h3>
|
||||
<h3>Strict Content Security Policy enforced.</h3>
|
||||
<h3>Sandboxed webview.</h3>
|
||||
<br />
|
||||
<h3><span>■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■</span></h3>
|
||||
<h3><span>■ ■ ■ ■ ■ ■</span></h3>
|
||||
<h3><span>■ ■ ■ ■ ■ ■ ■ ■ ■</span></h3>
|
||||
<h3><span>■ ■ ■ ■ ■ ■ ■</span></h3>
|
||||
</section>
|
||||
</div>
|
||||
<div class="dark-container">
|
||||
<div class="screenshot elevate"><img src="imgs/dark.png" /></div>
|
||||
<h1>Oh, it also comes in black.</h1>
|
||||
<p>Full system-level dark mode support for both UI and reading.</p>
|
||||
</div>
|
||||
<div class="get-container">
|
||||
<div><a href="https://www.microsoft.com/store/apps/9P71FC94LRH8?cid=website"><img class="ms-get" src="imgs/store.png" /></a></div>
|
||||
<div><a href="https://github.com/yang991178/fluent-reader/releases">Download for macOS or older Windows</a></div>
|
||||
<div class="links">
|
||||
<a href="https://github.com/yang991178/fluent-reader/">GitHub</a>
|
||||
<a href="https://github.com/yang991178/fluent-reader/blob/master/PRIVACY.md">Privacy</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,208 @@
|
|||
:root {
|
||||
--neutralLighterAlt: #faf9f8;
|
||||
--neutralLighter: #f3f2f1;
|
||||
--neutralLight: #edebe9;
|
||||
--neutralQuaternaryAlt: #e1dfdd;
|
||||
--neutralQuaternary: #d2d0ce;
|
||||
--neutralTertiaryAlt: #c8c6c4;
|
||||
--neutralTertiary: #a19f9d;
|
||||
--neutralSecondaryAlt: #8a8886;
|
||||
--neutralSecondary: #605e5c;
|
||||
--neutralPrimaryAlt: #3b3a39;
|
||||
--neutralPrimary: #323130;
|
||||
--neutralDark: #201f1e;
|
||||
--neutralDarker: #161514;
|
||||
--black: #000;
|
||||
--white: #fff;
|
||||
}
|
||||
|
||||
html, body {
|
||||
background-color: #f3f2f1;
|
||||
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
|
||||
margin: 0;
|
||||
line-height: 1.5;
|
||||
width: 100%;
|
||||
}
|
||||
html {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0078d4;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover, a:active {
|
||||
color: #004578;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.elevate {
|
||||
box-shadow: 0 6.4px 14.4px 0 rgba(0,0,0,.132), 0 1.2px 3.6px 0 rgba(0,0,0,.108);
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
min-height: 540px;
|
||||
position: relative;
|
||||
}
|
||||
.logo-container img {
|
||||
height: 180px;
|
||||
width: 180px;
|
||||
position: fixed;
|
||||
left: calc(50% - 90px);
|
||||
top: calc(50% - 230px);
|
||||
}
|
||||
.logo-container header {
|
||||
text-align: center;
|
||||
display: block;
|
||||
width: 100%;
|
||||
font-size: 1.75em;
|
||||
font-weight: 500;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: calc(50% - 40px);
|
||||
}
|
||||
|
||||
.screenshot {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
width: 95%;
|
||||
max-width: 1464px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.light-container {
|
||||
padding-bottom: 48px;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
}
|
||||
.light-container .screenshot {
|
||||
margin: 0 auto -280px;
|
||||
position: relative;
|
||||
top: -280px;
|
||||
}
|
||||
.light-container h1, .dark-container h1 {
|
||||
width: 95%;
|
||||
max-width: 800px;
|
||||
margin: 48px auto 24px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
.light-container p, .dark-container p {
|
||||
width: 85%;
|
||||
max-width: 750px;
|
||||
margin: 24px auto;
|
||||
text-align: center;
|
||||
font-size: 1.375em;
|
||||
color: #323130;
|
||||
}
|
||||
|
||||
.features-container {
|
||||
padding: 48px 0;
|
||||
margin: 0 auto;
|
||||
width: 95%;
|
||||
max-width: 950px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
position: relative;
|
||||
background-color: #f3f2f1;
|
||||
}
|
||||
.features-container > section {
|
||||
display: block;
|
||||
width: 45%;
|
||||
height: 560px;
|
||||
padding: 18px 36px;
|
||||
background-color: #fff;
|
||||
margin: 24px 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.features-container > section > h3 {
|
||||
font-weight: 500;
|
||||
color: #605e5c;
|
||||
margin: 0 0 .5em;
|
||||
}
|
||||
.features-container > section > h3 > span {
|
||||
color: #d2d0ce;
|
||||
background-color: #d2d0ce;
|
||||
user-select: none;
|
||||
}
|
||||
.features-container > section > img {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
max-width: 90%;
|
||||
}
|
||||
.features-container > section > img.center {
|
||||
left: auto;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.dark-container {
|
||||
position: relative;
|
||||
background-color: #1f1f1f;
|
||||
color: #fff;
|
||||
padding: 72px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.dark-container p {
|
||||
color: #d2d0ce;
|
||||
}
|
||||
|
||||
.get-container {
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
min-height: 540px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
.ms-get {
|
||||
width: 142px;
|
||||
height: 52px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.links {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
margin: calc(50vh - 210px) 0 48px;
|
||||
}
|
||||
.links > a {
|
||||
display: inline-block;
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
@media (max-width: 780px) {
|
||||
html, body { font-size: 14px; }
|
||||
.logo-container img {
|
||||
height: 140px;
|
||||
width: 140px;
|
||||
left: calc(50% - 70px);
|
||||
top: calc(50% - 190px);
|
||||
}
|
||||
.screenshot {
|
||||
margin-left: 5vw;
|
||||
}
|
||||
.light-container .screenshot {
|
||||
margin: 0 0 -25vw 5vw;
|
||||
position: relative;
|
||||
top: -25vw;
|
||||
}
|
||||
.screenshot > img {
|
||||
width: 150%;
|
||||
}
|
||||
.features-container > section {
|
||||
width: 95%;
|
||||
height: auto;
|
||||
padding-bottom: 80%;
|
||||
}
|
||||
.features-container > section:last-of-type {
|
||||
padding-bottom: 36px;
|
||||
}
|
||||
}
|