Răsfoiți Sursa

Add base-theme in p/themes

This base theme is not visible by default (no name). You can use it
to create new theme.
Fix https://github.com/marienfressinaud/FreshRSS/issues/533 (comment)
Marien Fressinaud 11 ani în urmă
părinte
comite
f56dd400b7

+ 4 - 1
app/Models/Themes.php

@@ -31,7 +31,10 @@ class FreshRSS_Themes extends Minz_Model {
 			if (file_exists($json_filename)) {
 				$content = file_get_contents($json_filename);
 				$res = json_decode($content, true);
-				if ($res && isset($res['files']) && is_array($res['files'])) {
+				if ($res &&
+						!empty($res['name']) &&
+						isset($res['files']) &&
+						is_array($res['files'])) {
 					$res['id'] = $theme_id;
 					return $res;
 				}

+ 12 - 0
p/themes/base-theme/README.md

@@ -0,0 +1,12 @@
+FreshRSS-base-theme
+===================
+
+A base theme for [FreshRSS](http://freshrss.org)
+
+1. Custom ```base.css``` file with colors, backgrounds and borders
+2. Change information in ```metadata.json``` file (at least, give a name!)
+3. Choose your new theme in FreshRSS configuration
+4. Enjoy your wonderful theme!
+
+Don't hesitate to share your theme with us [on Github](https://github.com/marienfressinaud/FreshRSS/issues) :)
+

+ 756 - 0
p/themes/base-theme/base.css

@@ -0,0 +1,756 @@
+@charset "UTF-8";
+
+/*=== FONTS */
+@font-face {
+	font-family: "OpenSans";
+	src: url("../fonts/openSans.woff") format("woff");
+}
+
+/*=== GENERAL */
+/*============*/
+html, body {
+	height: 100%;
+	font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", sans-serif;
+}
+
+/*=== Links */
+a {
+	outline: none;
+}
+
+/*=== Forms */
+legend {
+	margin: 20px 0 5px;
+	padding: 5px 0;
+	font-size: 1.4em;
+}
+label {
+	min-height: 25px;
+	padding: 5px 0;
+	cursor: pointer;
+}
+textarea {
+	width: 360px;
+	height: 100px;
+}
+input, select, textarea {
+	min-height: 25px;
+	padding: 5px;
+	line-height: 25px;
+	vertical-align: middle;
+}
+option {
+	padding: 0 .5em;
+}
+input:focus, select:focus, textarea:focus {
+}
+input:invalid, select:invalid {
+}
+input:disabled, select:disabled {
+}
+input.extend {
+	transition: width 200ms linear;
+	-moz-transition: width 200ms linear;
+	-webkit-transition: width 200ms linear;
+	-o-transition: width 200ms linear;
+	-ms-transition: width 200ms linear;
+}
+
+/*=== Tables */
+table {
+	border-collapse: collapse;
+}
+
+tr, th, td {
+	padding: 0.5em;
+}
+th {
+}
+form td,
+form th {
+	font-weight: normal;
+	text-align: center;
+}
+
+/*=== COMPONENTS */
+/*===============*/
+/*=== Forms */
+.form-group.form-actions {
+	padding: 5px 0;
+}
+.form-group.form-actions .btn {
+	margin: 0 10px;
+}
+.form-group .group-name {
+	padding: 10px 0;
+	text-align: right;
+}
+.form-group .group-controls {
+	min-height: 25px;
+	padding: 5px 0;
+}
+.form-group table {
+	margin: 10px 0 0 220px;
+}
+
+/*=== Buttons */
+.stick {
+	vertical-align: middle;
+	font-size: 0;
+}
+.stick input,
+.stick .btn {
+}
+.stick .btn:first-child,
+.stick input:first-child {
+}
+.stick .btn-important:first-child {
+}
+.stick .btn:last-child,
+.stick input:last-child {
+}
+.stick .btn + .btn,
+.stick .btn + input,
+.stick .btn + .dropdown > .btn,
+.stick input + .btn,
+.stick input + input,
+.stick input + .dropdown > .btn,
+.stick .dropdown + .btn,
+.stick .dropdown + input,
+.stick .dropdown + .dropdown > .btn {
+}
+.stick input + .btn {
+}
+.stick .btn + .dropdown > .btn {
+}
+
+.btn {
+	display: inline-block;
+	min-height: 37px;
+	min-width: 15px;
+	margin: 0;
+	padding: 5px 10px;
+	font-size: 0.9rem;
+	vertical-align: middle;
+	cursor: pointer;
+	overflow: hidden;
+}
+a.btn {
+	min-height: 25px;
+	line-height: 25px;
+}
+.btn:hover {
+	text-decoration: none;
+}
+.btn.active,
+.btn:active,
+.dropdown-target:target ~ .btn.dropdown-toggle {
+}
+
+.btn-important {
+	font-weight: normal;
+}
+.btn-important:hover {
+}
+.btn-important:active {
+}
+
+.btn-attention {
+}
+.btn-attention:hover {
+}
+.btn-attention:active {
+}
+
+/*=== Navigation */
+.nav-list .nav-header,
+.nav-list .item {
+	height: 2.5em;
+	line-height: 2.5em;
+	font-size: 0.9rem;
+}
+.nav-list .item:hover {
+}
+.nav-list .item:hover a {
+}
+.nav-list .item.active {
+}
+.nav-list .item.active a {
+}
+.nav-list .disable {
+	text-align: center;
+}
+.nav-list .item > a {
+	padding: 0 10px;
+}
+.nav-list a:hover {
+	text-decoration: none;
+}
+.nav-list .item.empty a {
+}
+.nav-list .item.active.empty a {
+}
+.nav-list .item.error a {
+}
+.nav-list .item.active.error a {
+}
+
+.nav-list .nav-header {
+	padding: 0 10px;
+	font-weight: bold;
+}
+
+.nav-list .nav-form {
+	padding: 3px;
+	text-align: center;
+}
+
+.nav-head {
+	margin: 0;
+	text-align: right;
+}
+.nav-head .item {
+	padding: 5px 10px;
+	font-size: 0.9rem;
+	line-height: 1.5rem;
+}
+
+/*=== Horizontal-list */
+.horizontal-list {
+	margin: 0;
+	padding: 0;
+}
+.horizontal-list .item {
+	vertical-align: middle;
+}
+
+/*=== Dropdown */
+.dropdown-menu {
+	margin: 5px 0 0;
+	padding: 5px 0;
+	font-size: 0.8rem;
+	text-align: left;
+}
+.dropdown-menu:after {
+	content: "";
+	position: absolute;
+	top: -6px;
+	right: 13px;
+	width: 10px;
+	height: 10px;
+	z-index: -10;
+	transform: rotate(45deg);
+	-moz-transform: rotate(45deg);
+	-webkit-transform: rotate(45deg);
+	-ms-transform: rotate(45deg);
+}
+.dropdown-header {
+	padding: 0 5px 5px;
+	font-weight: bold;
+	text-align: left;
+}
+.dropdown-menu > .item {
+}
+.dropdown-menu > .item > a {
+	padding: 0 25px;
+	line-height: 2.5em;
+}
+.dropdown-menu > .item > span {
+	padding: 0 25px;
+	line-height: 2em;
+}
+.dropdown-menu > .item:hover {
+}
+.dropdown-menu > .item[aria-checked="true"] > a:before {
+	font-weight: bold;
+	margin: 0 0 0 -14px;
+}
+.dropdown-menu > .item:hover > a {
+	text-decoration: none;
+}
+.dropdown-menu .input select,
+.dropdown-menu .input input {
+	margin: 0 auto 5px;
+	padding: 2px 5px;
+}
+
+.separator {
+	margin: 5px 0;
+}
+
+/*=== Alerts */
+.alert {
+	margin: 15px auto;
+	padding: 10px 15px;
+	font-size: 0.9em;
+}
+.alert-head {
+	font-size: 1.15em;
+}
+.alert > a {
+	text-decoration: underline;
+}
+.alert-warn {
+}
+.alert-success {
+}
+.alert-error {
+}
+
+/*=== Pagination */
+.pagination {
+	text-align: center;
+	font-size: 0.8em;
+}
+.content .pagination {
+	margin: 0;
+	padding: 0;
+}
+.pagination .item.pager-current {
+	font-weight: bold;
+	font-size: 1.5em;
+}
+.pagination .item a {
+	display: block;
+	font-style: italic;
+	line-height: 3em;
+	text-decoration: none;
+}
+.pagination .item a:hover {
+}
+.pagination:first-child .item {
+}
+.pagination:last-child .item {
+}
+
+.pagination .loading,
+.pagination a:hover.loading {
+	font-size: 0;
+}
+
+/*=== STRUCTURE */
+/*===============*/
+/*=== Header */
+.header {
+}
+.header > .item {
+	padding: 10px 0;
+	vertical-align: middle;
+	text-align: center;
+}
+.header > .item.title h1 {
+}
+.header > .item.title h1 a {
+	text-decoration: none;
+}
+.header > .item.search input {
+	width: 230px;
+}
+.header .item.search input:focus {
+	width: 350px;
+}
+
+/*=== Body */
+#global {
+}
+.aside {
+}
+.aside.aside_flux {
+	padding: 10px 0 50px;
+}
+
+/*=== Aside main page (categories) */
+.categories {
+	text-align: center;
+}
+.category {
+	width: 235px;
+	margin: 10px auto;
+	text-align: left;
+}
+.category .btn:first-child {
+	position: relative;
+	width: 213px;
+}
+.category.stick .btn:first-child {
+	width: 176px;
+}
+.category .btn:first-child:not([data-unread="0"]):after {
+	position: absolute;
+	top: 3px; right: 3px;
+	padding: 1px 5px;
+}
+
+/*=== Aside main page (feeds) */
+.categories .feeds .item.active {
+}
+.categories .feeds .item.active .feed {
+}
+.categories .feeds .item.empty .feed {
+}
+.categories .feeds .item.empty.active {
+}
+.categories .feeds .item.empty.active .feed {
+}
+.categories .feeds .item.error .feed {
+}
+.categories .feeds .item .feed {
+	margin: 0;
+	width: 165px;
+	line-height: 3em;
+	font-size: 0.8em;
+	text-align: left;
+	text-decoration: none;
+}
+.categories .feeds .feed:not([data-unread="0"]) {
+	font-weight: bold;
+}
+.categories .feeds .dropdown-menu:after {
+	left: 2px;
+}
+.categories .feeds .item .dropdown-target:target ~ .dropdown-toggle > .icon,
+.categories .feeds .item:hover .dropdown-toggle > .icon,
+.categories .feeds .item.active .dropdown-toggle > .icon {
+	vertical-align: middle;
+}
+
+/*=== Configuration pages */
+.post {
+	padding: 10px 50px;
+	font-size: 0.9em;
+}
+.post form {
+	margin: 10px 0;
+}
+.post.content {
+	max-width: 550px;
+}
+
+/*=== Prompt (centered) */
+.prompt {
+	text-align: center;
+}
+.prompt label {
+	text-align: left;
+}
+.prompt form {
+	margin: 10px auto 20px auto;
+	width: 180px;
+}
+.prompt input {
+	margin: 5px auto;
+	width: 100%;
+}
+.prompt p {
+	margin: 20px 0;
+}
+
+/*=== New article notification */
+#new-article {
+	text-align: center;
+	font-size: 0.9em;
+}
+#new-article:hover {
+}
+#new-article > a {
+	line-height: 3em;
+	font-weight: bold;
+}
+#new-article > a:hover {
+	text-decoration: none;
+}
+
+/*=== Day indication */
+.day {
+	padding: 0 10px;
+	font-weight: bold;
+	line-height: 3em;
+}
+#new-article + .day {
+}
+.day .name {
+	padding: 0 10px 0 0;
+	font-size: 1.8em;
+	opacity: 0.3;
+	font-style: italic;
+	text-align: right;
+}
+
+/*=== Index menu */
+.nav_menu {
+	text-align: center;
+	padding: 5px 0;
+}
+
+/*=== Feed articles */
+.flux {
+}
+.flux:hover {
+}
+.flux.current {
+}
+.flux.not_read {
+}
+.flux.not_read:not(.current):hover .item.title {
+}
+.flux.favorite {
+}
+.flux.favorite:not(.current):hover .item.title {
+}
+.flux.current {
+}
+
+
+.flux_header {
+	font-size: 0.8rem;
+	cursor: pointer;
+}
+.flux_header .title {
+	font-size: 0.9rem;
+}
+.flux .website .favicon {
+	padding: 5px;
+}
+.flux .date {
+	font-size: 0.7rem;
+}
+.flux:not(.current):hover .item.title {
+}
+
+.flux .bottom {
+	font-size: 0.8rem;
+	text-align: center;
+}
+
+/*=== Content of feed articles */
+.content {
+	padding: 20px 10px;
+}
+.content > h1.title > a {
+}
+
+.content hr {
+	margin: 30px 10px;
+	height: 1px;
+}
+
+.content pre {
+	margin: 10px auto;
+	padding: 10px 20px;
+	overflow: auto;
+	font-size: 0.9rem;
+}
+.content code {
+	padding: 2px 5px;
+}
+.content pre code {
+}
+
+.content blockquote {
+	display: block;
+	margin: 0;
+	padding: 5px 20px;
+}
+.content blockquote p {
+	margin: 0;
+}
+
+/*=== Notification and actualize notification */
+.notification {
+	padding: 0 0 0 5px;
+	text-align: center;
+	font-weight: bold;
+	font-size: 0.9em;
+	line-height: 3em;
+	z-index: 10;
+	vertical-align: middle;
+}
+.notification.good {
+}
+.notification.bad {
+}
+.notification a.close {
+	padding: 0 15px;
+	line-height: 3em;
+}
+.notification.good a.close:hover {
+}
+.notification.bad a.close:hover {
+}
+
+.notification#actualizeProgress {
+	line-height: 2em;
+}
+
+/*=== "Load more" part */
+#bigMarkAsRead {
+	text-align: center;
+	text-decoration: none;
+}
+#bigMarkAsRead:hover {
+}
+#bigMarkAsRead:hover .bigTick {
+}
+
+/*=== Navigation menu (for articles) */
+#nav_entries {
+	margin: 0;
+	text-align: center;
+	line-height: 3em;
+	table-layout: fixed;
+}
+
+/*=== READER VIEW */
+/*================*/
+#stream.reader .flux {
+	padding: 0 0 50px;
+}
+#stream.reader .flux .author {
+	margin: 0 0 10px;
+	font-size: 90%;
+}
+
+/*=== GLOBAL VIEW */
+/*================*/
+#stream.global .box-category {
+	text-align: left;
+}
+#stream.global .category {
+	margin: 0;
+}
+#stream.global .btn {
+	width: auto;
+	height: 2em;
+	margin: 0;
+	padding: 0 10px;
+	line-height: 2em;
+	font-size: 1.2rem;
+}
+#stream.global .btn:not([data-unread="0"]) {
+	font-weight: bold;
+}
+#stream.global .btn:first-child:not([data-unread="0"]):after {
+	top: 0; right: 5px;
+	font-weight: bold;
+}
+#stream.global .box-category .feeds {
+	max-height: 250px;
+}
+#stream.global .box-category .feeds .item {
+	padding: 2px 10px;
+	font-size: 0.9rem;
+}
+
+/*=== DIVERS */
+/*===========*/
+.aside.aside_feed .nav-form input,
+.aside.aside_feed .nav-form select {
+	width: 140px;
+}
+.aside.aside_feed .nav-form .dropdown .dropdown-menu {
+	right: -20px;
+}
+.aside.aside_feed .nav-form .dropdown .dropdown-menu:after {
+	right: 33px;
+}
+
+/*=== STATISTICS */
+/*===============*/
+.stat {
+	margin: 10px 0 20px;
+}
+
+.stat th,
+.stat td,
+.stat tr {
+}
+.stat > table td,
+.stat > table th {
+	text-align: center;
+}
+
+/*=== LOGS */
+/*=========*/
+.logs {
+	overflow: hidden;
+}
+.log {
+	padding: 5px 10px;
+	font-size: 0.8rem;
+}
+.log+.log {
+}
+.log .date {
+	display: block;
+	font-weight: bold;
+}
+.log.error {
+}
+.log.warning {
+}
+.log.notice {
+}
+.log.debug {
+}
+
+/*=== MOBILE */
+/*===========*/
+@media(max-width: 840px) {
+	.aside {
+		transition: width 200ms linear;
+		-moz-transition: width 200ms linear;
+		-webkit-transition: width 200ms linear;
+		-o-transition: width 200ms linear;
+		-ms-transition: width 200ms linear;
+	}
+	.aside .toggle_aside,
+	#panel .close {
+		position: absolute;
+		display: block;
+		top: 0; right: 0;
+		width: 30px;
+		height: 30px;
+		line-height: 30px;
+		text-align: center;
+	}
+
+	.nav_menu .btn {
+		margin: 5px 10px;
+	}
+	.nav_menu .stick {
+		margin: 0 10px;
+	}
+	.nav_menu .stick .btn {
+		margin: 5px 0;
+	}
+	.nav_menu .search {
+		display: inline-block;
+		max-width: 97%;
+	}
+	.nav_menu .search input {
+		max-width: 97%;
+		width: 90px;
+	}
+	.nav_menu .search input:focus {
+		width: 400px;
+	}
+
+	.day .name {
+		font-size: 1.1rem;
+	}
+
+	.pagination {
+		margin: 0 0 3.5em;
+	}
+
+	.notification a.close {
+		display: block;
+		left: 0;
+	}
+	.notification a.close:hover {
+		opacity: 0.5;
+	}
+	.notification a.close .icon {
+		display: none;
+	}
+}

+ 7 - 0
p/themes/base-theme/metadata.json

@@ -0,0 +1,7 @@
+{
+  "name": "",
+  "author": "Your name",
+  "description": "A wonderful base theme",
+  "version": 0.1,
+  "files": ["template.css", "base.css"]
+}

+ 695 - 0
p/themes/base-theme/template.css

@@ -0,0 +1,695 @@
+@charset "UTF-8";
+
+/*=== GENERAL */
+/*============*/
+html, body {
+	margin: 0;
+	padding: 0;
+	font-size: 100%;
+}
+
+/*=== Links */
+a {
+	text-decoration: none;
+}
+a:hover {
+	text-decoration: underline;
+}
+
+/*=== Lists */
+ul, ol, dd {
+	margin: 0;
+	padding: 0;
+}
+
+/*=== Titles */
+h1 {
+	margin: 0.6em 0 0.3em;
+	font-size: 1.5em;
+	line-height: 1.6em;
+}
+h2 {
+	margin: 0.5em 0 0.25em;
+	font-size: 1.3em;
+	line-height: 2em;
+}
+h3 {
+	margin: 0.5em 0 0.25em;
+	font-size: 1.1em;
+	line-height: 2em;
+}
+
+/*=== Paragraphs */
+p {
+	margin: 1em 0 0.5em;
+	font-size: 1em;
+}
+
+/*=== Images */
+img {
+	height: auto;
+	max-width: 100%;
+}
+img.favicon {
+	height: 16px;
+	width: 16px;
+	vertical-align: middle;
+}
+
+/*=== Videos */
+iframe, embed, object, video {
+	max-width: 100%;
+}
+
+/*=== Forms */
+legend {
+	display: block;
+	width: 100%;
+	clear: both;
+}
+label {
+	display: block;
+}
+input {
+	width: 180px;
+}
+textarea {
+	width: 300px;
+}
+input, select, textarea {
+	display: inline-block;
+	max-width: 100%;
+}
+input[type="radio"],
+input[type="checkbox"] {
+	width: 15px !important;
+	min-height: 15px !important;
+}
+input.extend:focus {
+	width: 300px;
+}
+
+/*=== COMPONENTS */
+/*===============*/
+/*=== Forms */
+.form-group:after {
+	content: "";
+	display: block;
+	clear: both;
+}
+.form-group.form-actions {
+	min-width: 250px;
+}
+.form-group .group-name {
+	display: block;
+	float: left;
+	width: 200px;
+}
+.form-group .group-controls {
+	min-width: 250px;
+	margin: 0 0 0 220px;
+}
+.form-group .group-controls .control {
+	display: block;
+}
+
+/*=== Buttons */
+.stick {
+	display: inline-block;
+	white-space: nowrap;
+}
+.btn,
+a.btn {
+	display: inline-block;
+	cursor: pointer;
+	overflow: hidden;
+}
+.btn-important {
+	font-weight: bold;
+}
+
+/*=== Navigation */
+.nav-list .nav-header,
+.nav-list .item {
+	display: block;
+}
+.nav-list .item,
+.nav-list .item > a {
+	display: block;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.nav-head {
+	display: block;
+}
+.nav-head .item {
+	display: inline-block;
+}
+
+/*=== Horizontal-list */
+.horizontal-list {
+	display: table;
+	table-layout: fixed;
+	width: 100%;
+}
+.horizontal-list .item {
+	display: table-cell;
+}
+
+/*=== Dropdown */
+.dropdown {
+	position: relative;
+	display: inline-block;
+}
+.dropdown-target {
+	display: none;
+}
+.dropdown-menu {
+	display: none;
+	min-width: 200px;
+	margin: 0;
+	position: absolute;
+	right: 0;
+	background: #fff;
+	border: 1px solid #aaa;
+}
+.dropdown-header {
+	display: block;
+}
+.dropdown-menu > .item {
+	display: block;
+}
+.dropdown-menu > .item > a,
+.dropdown-menu > .item > span {
+	display: block;
+}
+.dropdown-menu > .item[aria-checked="true"] > a:before {
+	content: '✓';
+}
+.dropdown-menu .input {
+	display: block;
+}
+.dropdown-menu .input select,
+.dropdown-menu .input input {
+	display: block;
+	max-width: 95%;
+}
+.dropdown-target:target ~ .dropdown-menu {
+	display: block;
+	z-index: 10;
+}
+.dropdown-close {
+	display: inline;
+}
+.dropdown-close a {
+	font-size: 0;
+	position: fixed;
+	top: 0; bottom: 0;
+	left: 0; right: 0;
+	display: block;
+	z-index: -10;
+}
+.separator {
+	display: block;
+	height: 0;
+	border-bottom: 1px solid #aaa;
+}
+
+/*=== Alerts */
+.alert {
+	display: block;
+	width: 90%;
+}
+.group-controls .alert {
+	width: 100%
+}
+.alert-head {
+	margin: 0;
+	font-weight: bold;
+}
+.alert ul {
+	margin: 5px 20px;
+}
+
+/*=== Icons */
+.icon {
+	display: inline-block;
+	width: 16px;
+	height: 16px;
+	vertical-align: middle;
+	line-height: 16px;
+}
+
+/*=== Pagination */
+.pagination {
+	display: table;
+	width: 100%;
+	margin: 0;
+	padding: 0;
+	table-layout: fixed;
+}
+.pagination .item {
+	display: table-cell;
+}
+.pagination .pager-first,
+.pagination .pager-previous,
+.pagination .pager-next,
+.pagination .pager-last {
+	width: 100px;
+}
+
+/*=== STRUCTURE */
+/*===============*/
+/*=== Header */
+.header {
+	display: table;
+	width: 100%;
+	table-layout: fixed;
+}
+.header > .item {
+	display: table-cell;
+}
+.header > .item.title {
+	width: 250px;
+	white-space: nowrap;
+}
+.header > .item.title h1 {
+	display: inline-block;
+}
+.header > .item.title .logo {
+	display: inline-block;
+	height: 32px;
+	width: 32px;
+	vertical-align: middle;
+}
+.header > .item.configure {
+	width: 100px;
+}
+
+/*=== Body */
+#global {
+	display: table;
+	width: 100%;
+	height: 100%;
+	table-layout: fixed;
+}
+.aside {
+	display: table-cell;
+	height: 100%;
+	width: 250px;
+	vertical-align: top;
+}
+.aside.aside_flux {
+	background: #fff;
+}
+
+/*=== Aside main page (categories) */
+.categories {
+	list-style: none;
+	margin: 0;
+}
+.category {
+	display: block;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.category .btn:not([data-unread="0"]):after {
+	content: attr(data-unread);
+}
+
+/*=== Aside main page (feeds) */
+.categories .feeds {
+	width: 100%;
+	list-style: none;
+}
+.categories .feeds:not(.active) {
+	display: none;
+}
+.categories .feeds .feed {
+	display: inline-block;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	vertical-align: middle;
+}
+.categories .feeds .feed:not([data-unread="0"]):before {
+	content: "(" attr(data-unread) ") ";
+}
+.categories .feeds .dropdown-menu {
+	left: 0;
+}
+.categories .feeds .item .dropdown-toggle > .icon {
+	visibility: hidden;
+	cursor: pointer;
+	vertical-align: top;
+}
+.categories .feeds .item .dropdown-target:target ~ .dropdown-toggle > .icon,
+.categories .feeds .item:hover .dropdown-toggle > .icon,
+.categories .feeds .item.active .dropdown-toggle > .icon {
+	visibility: visible;
+}
+
+/*=== New article notification */
+#new-article {
+	display: none;
+}
+#new-article > a {
+	display: block;
+}
+
+/*=== Day indication */
+.day .name {
+	position: absolute;
+	right: 0;
+	width: 50%;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+
+/*=== Feed article header and footer */
+.flux_header {
+	position: relative;
+}
+.flux .item {
+	line-height: 40px;
+	white-space: nowrap;
+}
+.flux .item.manage,
+.flux .item.link {
+	width: 40px;
+	text-align: center;
+}
+.flux .item.website {
+	width: 200px;
+}
+.flux.not_read .item.title,
+.flux.current .item.title {
+	font-weight: bold;
+}
+.flux:not(.current):hover .item.title {
+	position: absolute;
+	max-width: calc(100% - 320px);
+	background: #fff;
+}
+.flux .item.title a {
+	color: #000;
+	text-decoration: none;
+}
+.flux .item.date {
+	width: 145px;
+	text-align: right;
+}
+.flux .item > a {
+	display: block;
+}
+.flux .item > a {
+	display: block;
+	text-decoration: none;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+.flux .item.share > a {
+	display: list-item;
+	list-style-position: inside;
+	list-style-type: decimal;
+}
+
+/*=== Feed article content */
+.hide_posts > .flux:not(.active) > .flux_content {
+	display: none;
+}
+.content {
+	min-height: 20em;
+	margin: auto;
+	line-height: 1.7em;
+	word-wrap: break-word;
+}
+.content.large {
+	max-width: 1000px;
+}
+.content.medium {
+	max-width: 800px;
+}
+.content.thin {
+	max-width: 550px;
+}
+.content ul,
+.content ol,
+.content dd {
+	margin: 0 0 0 15px;
+	padding: 0 0 5px 15px;
+}
+.content pre {
+	overflow: auto;
+}
+
+/*=== Notification and actualize notification */
+.notification {
+	position: absolute;
+	top: 1em;
+	left: 25%; right: 25%;
+	z-index: 10;
+	background: #fff;
+	border: 1px solid #aaa;
+}
+.notification.closed {
+	display: none;
+}
+.notification a.close {
+	position: absolute;
+	top: 0; bottom: 0;
+	right: 0;
+	display: inline-block;
+}
+
+#actualizeProgress {
+	position: fixed;
+}
+#actualizeProgress progress {
+	max-width: 100%;
+	vertical-align: middle;
+}
+#actualizeProgress .progress {
+	vertical-align: middle;
+}
+
+/*=== Navigation menu (for articles) */
+#nav_entries {
+	position: fixed;
+	bottom: 0; left: 0;
+	display: table;
+	width: 250px;
+	background: #fff;
+	table-layout: fixed;
+}
+#nav_entries .item {
+	display: table-cell;
+	width: 30%;
+}
+#nav_entries a {
+	display: block;
+}
+
+/*=== "Load more" part */
+#load_more {
+	min-height: 40px;
+}
+.loading {
+	background: url("loader.gif") center center no-repeat;
+	font-size: 0;
+}
+#bigMarkAsRead {
+	display: block;
+	padding: 3em 0;
+	text-align: center;
+}
+.bigTick {
+	font-size: 7em;
+	line-height: 1.6em;
+}
+
+/*=== Statistiques */
+.stat > table {
+	width: 100%;
+}
+
+/*=== GLOBAL VIEW */
+/*================*/
+/*=== Category boxes */
+#stream.global .box-category {
+	display: inline-block;
+	width: 19em;
+	max-width: 95%;
+	margin: 20px 10px;
+	border: 1px solid #ccc;
+	vertical-align: top;
+}
+#stream.global .category {
+	width: 100%;
+}
+#stream.global .btn {
+	display: block;
+}
+#stream.global .box-category .feeds {
+	display: block;
+	overflow: auto;
+}
+#stream.global .box-category .feed {
+	width: 19em;
+	max-width: 90%;
+}
+
+/*=== Panel */
+#overlay {
+	display: none;
+	position: fixed;
+	top: 0; bottom: 0;
+	left: 0; right: 0;
+	background: rgba(0, 0, 0, 0.9);
+}
+#panel {
+	display: none;
+	position: fixed;
+	top: 1em; bottom: 1em;
+	left: 2em; right: 2em;
+	overflow: auto;
+	background: #fff;
+}
+#panel .close {
+	position: fixed;
+	top: 0; bottom: 0;
+	left: 0; right: 0;
+	display: block;
+}
+#panel .close img {
+	display: none;
+}
+
+/*=== DIVERS */
+/*===========*/
+.nav-login,
+.nav_menu .search,
+.nav_menu .toggle_aside {
+	display: none;
+}
+
+.aside .toggle_aside {
+	position: absolute;
+	right: 0;
+	display: none;
+	width: 30px;
+	height: 30px;
+	line-height: 30px;
+	text-align: center;
+}
+
+/*=== MOBILE */
+/*===========*/
+@media(max-width: 840px) {
+	.header,
+	.aside .btn-important,
+	.aside .feeds .dropdown,
+	.flux_header .item.website span,
+	.item.date, .day .date,
+	.dropdown-menu > .no-mobile,
+	.no-mobile {
+		display: none;
+	}
+	.nav-login {
+		display: block;
+	}
+	.nav_menu .toggle_aside,
+	.aside .toggle_aside,
+	.nav_menu .search,
+	#panel .close img {
+		display: inline-block;
+	}
+
+	.aside {
+		position: fixed;
+		top: 0; bottom: 0;
+		left: 0;
+		width: 0;
+		overflow: hidden;
+		z-index: 100;
+	}
+	.aside:target {
+		width: 90%;
+		overflow: auto;
+	}
+	.aside .categories {
+		margin: 10px 0 75px;
+	}
+
+	.flux_header .item.website {
+		width: 40px;
+	}
+
+	.flux:not(.current):hover .item.title {
+		position: relative;
+		width: auto;
+		white-space: nowrap;
+	}
+
+	.notification {
+		top: 0;
+		left: 0;
+		right: 0;
+	}
+
+	#nav_entries {
+		width: 100%;
+	}
+
+	#stream.global .box-category {
+		margin: 10px 0;
+	}
+
+	#panel {
+		top: 0; bottom: 0;
+		left: 0; right: 0;
+	}
+	#panel .close {
+		top: 0; right: 0;
+		left: auto; bottom: auto;
+		display: inline-block;
+		width: 30px;
+		height: 30px;
+	}
+}
+
+/*=== PRINTER */
+/*============*/
+@media print {
+	.header, .aside,
+	.nav_menu, .day,
+	.flux_header,
+	.flux_content .bottom,
+	.pagination,
+	#nav_entries {
+		display: none;
+	}
+	html, body {
+		background: #fff;
+		color: #000;
+		font-family: Serif;
+	}
+	#global,
+	.flux_content {
+		display: block !important;
+	}
+	.flux_content .content {
+		width: 100% !important;
+	}
+	.flux_content .content a {
+		color: #000;
+	}
+	.flux_content .content a:after {
+		content: " [" attr(href) "] ";
+		font-style: italic;
+	}
+}