mirror of
https://github.com/standardebooks/web.git
synced 2025-07-06 14:50:39 -04:00
Add new sorting and filtering options to ebook browse page
This commit is contained in:
parent
27f7862ae9
commit
1010b287a6
13 changed files with 786 additions and 442 deletions
|
@ -219,7 +219,7 @@ Define domain standardebooks.org
|
|||
RewriteRule ^/images/covers/(.+?)\-[a-z0-9]{8}\-(cover|hero)(@2x)?\.(jpg|avif)$ /images/covers/$1-$2$3.$4
|
||||
|
||||
RewriteRule ^/ebooks/([^\./]+?)$ /ebooks/author.php?url-path=$1 [QSA]
|
||||
RewriteRule ^/tags/([^\./]+?)$ /ebooks/index.php?tag=$1 [QSA]
|
||||
RewriteRule ^/tags/([^\./]+?)$ /ebooks/index.php?tags[]=$1 [QSA]
|
||||
RewriteRule ^/collections/([^\./]+?)$ /ebooks/index.php?collection=$1 [QSA]
|
||||
|
||||
# Prevent this rule from firing if we're getting a distribution file
|
||||
|
|
|
@ -218,7 +218,7 @@ Define domain standardebooks.test
|
|||
RewriteRule ^/images/covers/(.+?)\-[a-z0-9]{8}\-(cover|hero)(@2x)?\.(jpg|avif)$ /images/covers/$1-$2$3.$4
|
||||
|
||||
RewriteRule ^/ebooks/([^\./]+?)$ /ebooks/author.php?url-path=$1 [QSA]
|
||||
RewriteRule ^/tags/([^\./]+?)$ /ebooks/index.php?tag=$1 [QSA]
|
||||
RewriteRule ^/tags/([^\./]+?)$ /ebooks/index.php?tags[]=$1 [QSA]
|
||||
RewriteRule ^/collections/([^\./]+?)$ /ebooks/index.php?collection=$1 [QSA]
|
||||
|
||||
# Prevent this rule from firing if we're getting a distribution file
|
||||
|
|
|
@ -15,6 +15,10 @@ const HTTP_VAR_INT = 0;
|
|||
const HTTP_VAR_STR = 1;
|
||||
const HTTP_VAR_BOOL = 2;
|
||||
const HTTP_VAR_DEC = 3;
|
||||
const HTTP_VAR_ARRAY = 4;
|
||||
|
||||
const VIEW_GRID = 'grid';
|
||||
const VIEW_LIST = 'list';
|
||||
|
||||
const SOURCE_PROJECT_GUTENBERG = 0;
|
||||
const SOURCE_HATHI_TRUST = 1;
|
||||
|
|
|
@ -3,6 +3,10 @@ class HttpInput{
|
|||
public static function GetString(string $variable, bool $allowEmptyString = true, string $default = null): ?string{
|
||||
$var = self::GetHttpVar($variable, HTTP_VAR_STR, GET, $default);
|
||||
|
||||
if(is_array($var)){
|
||||
return $default;
|
||||
}
|
||||
|
||||
if(!$allowEmptyString && $var === ''){
|
||||
return null;
|
||||
}
|
||||
|
@ -22,6 +26,10 @@ class HttpInput{
|
|||
return self::GetHttpVar($variable, HTTP_VAR_DEC, GET, $default);
|
||||
}
|
||||
|
||||
public static function GetArray(string $variable, array $default = null): ?array{
|
||||
return self::GetHttpVar($variable, HTTP_VAR_ARRAY, GET, $default);
|
||||
}
|
||||
|
||||
private static function GetHttpVar(string $variable, int $type, int $set, $default){
|
||||
$vars = array();
|
||||
|
||||
|
@ -38,7 +46,12 @@ class HttpInput{
|
|||
}
|
||||
|
||||
if(isset($vars[$variable])){
|
||||
$var = trim($vars[$variable]);
|
||||
if(is_array($vars[$variable])){
|
||||
return $vars[$variable];
|
||||
}
|
||||
else{
|
||||
$var = trim($vars[$variable]);
|
||||
}
|
||||
|
||||
switch($type){
|
||||
case HTTP_VAR_STR:
|
||||
|
|
202
lib/Library.php
202
lib/Library.php
|
@ -10,64 +10,107 @@ class Library{
|
|||
/**
|
||||
* @return array<Ebook>
|
||||
*/
|
||||
public static function GetEbooks(string $sort = null): array{
|
||||
$ebooks = [];
|
||||
public static function FilterEbooks($query = null, $tags = [], $sort = null){
|
||||
$ebooks = Library::GetEbooks();
|
||||
$matches = $ebooks;
|
||||
|
||||
if($sort === null){
|
||||
$sort = SORT_NEWEST;
|
||||
}
|
||||
|
||||
if(sizeof($tags) > 0 && !in_array('all', $tags)){ // 0 tags means "all ebooks"
|
||||
$matches = [];
|
||||
foreach($tags as $tag){
|
||||
foreach($ebooks as $ebook){
|
||||
if($ebook->HasTag($tag)){
|
||||
$matches[$ebook->Identifier] = $ebook;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($query !== null){
|
||||
$filteredMatches = [];
|
||||
|
||||
foreach($matches as $ebook){
|
||||
if($ebook->Contains($query)){
|
||||
$filteredMatches[$ebook->Identifier] = $ebook;
|
||||
}
|
||||
}
|
||||
|
||||
$matches = $filteredMatches;
|
||||
}
|
||||
|
||||
switch($sort){
|
||||
case SORT_AUTHOR_ALPHA:
|
||||
// Get all ebooks, sorted by author alpha first.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks-alpha');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks-alpha');
|
||||
}
|
||||
usort($matches, function($a, $b){
|
||||
return strcmp(mb_strtolower($a->Authors[0]->SortName), mb_strtolower($b->Authors[0]->SortName));
|
||||
});
|
||||
break;
|
||||
|
||||
case SORT_NEWEST:
|
||||
// Get all ebooks, sorted by release date first.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks-newest');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks-newest');
|
||||
}
|
||||
usort($matches, function($a, $b){
|
||||
if($a->Timestamp < $b->Timestamp){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->Timestamp == $b->Timestamp){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
|
||||
$matches = array_reverse($matches);
|
||||
break;
|
||||
|
||||
case SORT_READING_EASE:
|
||||
// Get all ebooks, sorted by easiest first.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks-reading-ease');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks-reading-ease');
|
||||
}
|
||||
usort($matches, function($a, $b){
|
||||
if($a->ReadingEase < $b->ReadingEase){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->ReadingEase == $b->ReadingEase){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
|
||||
$matches = array_reverse($matches);
|
||||
break;
|
||||
|
||||
case SORT_LENGTH:
|
||||
// Get all ebooks, sorted by fewest words first.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks-length');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks-length');
|
||||
}
|
||||
usort($matches, function($a, $b){
|
||||
if($a->WordCount < $b->WordCount){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->WordCount == $b->WordCount){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
// Get all ebooks, unsorted.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks');
|
||||
}
|
||||
break;
|
||||
return $matches;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<Ebook>
|
||||
*/
|
||||
public static function GetEbooks(): array{
|
||||
$ebooks = [];
|
||||
|
||||
// Get all ebooks, unsorted.
|
||||
try{
|
||||
$ebooks = apcu_fetch('ebooks');
|
||||
}
|
||||
catch(Safe\Exceptions\ApcuException $ex){
|
||||
Library::RebuildCache();
|
||||
$ebooks = apcu_fetch('ebooks');
|
||||
}
|
||||
|
||||
return $ebooks;
|
||||
|
@ -121,6 +164,10 @@ class Library{
|
|||
return $ebooks;
|
||||
}
|
||||
|
||||
public static function GetTags(): array{
|
||||
return apcu_fetch('tags');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<Ebook>
|
||||
*/
|
||||
|
@ -153,6 +200,7 @@ class Library{
|
|||
$collections = [];
|
||||
$tags = [];
|
||||
$authors = [];
|
||||
$tagsByName = [];
|
||||
|
||||
foreach(explode("\n", trim(shell_exec('find ' . EBOOKS_DIST_PATH . ' -name "content.opf"') ?? '')) as $filename){
|
||||
try{
|
||||
|
@ -179,6 +227,7 @@ class Library{
|
|||
|
||||
// Create the tags cache
|
||||
foreach($ebook->Tags as $tag){
|
||||
$tagsByName[] = $tag->Name;
|
||||
$lcTag = strtolower($tag->Name);
|
||||
if(!array_key_exists($lcTag, $tags)){
|
||||
$tags[$lcTag] = [];
|
||||
|
@ -209,66 +258,6 @@ class Library{
|
|||
apcu_store('ebook-' . $ebookWwwFilesystemPath, $ebook);
|
||||
}
|
||||
|
||||
// Sort ebooks by release date, then save
|
||||
usort($ebooks, function($a, $b){
|
||||
if($a->Timestamp < $b->Timestamp){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->Timestamp == $b->Timestamp){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
|
||||
$ebooks = array_reverse($ebooks);
|
||||
|
||||
apcu_delete('ebooks-newest');
|
||||
apcu_store('ebooks-newest', $ebooks);
|
||||
|
||||
// Sort ebooks by title alpha, then save
|
||||
usort($ebooks, function($a, $b){
|
||||
return strcmp(mb_strtolower($a->Authors[0]->SortName), mb_strtolower($b->Authors[0]->SortName));
|
||||
});
|
||||
|
||||
apcu_delete('ebooks-alpha');
|
||||
apcu_store('ebooks-alpha', $ebooks);
|
||||
|
||||
// Sort ebooks by reading ease, then save
|
||||
usort($ebooks, function($a, $b){
|
||||
if($a->ReadingEase < $b->ReadingEase){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->ReadingEase == $b->ReadingEase){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
|
||||
$ebooks = array_reverse($ebooks);
|
||||
|
||||
apcu_delete('ebooks-reading-ease');
|
||||
apcu_store('ebooks-reading-ease', $ebooks);
|
||||
|
||||
// Sort ebooks by word count, then save
|
||||
usort($ebooks, function($a, $b){
|
||||
if($a->WordCount < $b->WordCount){
|
||||
return -1;
|
||||
}
|
||||
elseif($a->WordCount == $b->WordCount){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
|
||||
apcu_delete('ebooks-length');
|
||||
apcu_store('ebooks-length', $ebooks);
|
||||
|
||||
// Now store various collections
|
||||
apcu_delete(new APCUIterator('/^collection-/'));
|
||||
foreach($collections as $collection => $ebooks){
|
||||
|
@ -282,6 +271,11 @@ class Library{
|
|||
apcu_store('tag-' . $tag, $ebooks);
|
||||
}
|
||||
|
||||
apcu_delete('tags');
|
||||
$tagsByName = array_unique($tagsByName, SORT_STRING);
|
||||
natsort($tagsByName);
|
||||
apcu_store('tags', $tagsByName);
|
||||
|
||||
apcu_delete(new APCUIterator('/^author-/'));
|
||||
foreach($authors as $author => $ebooks){
|
||||
apcu_store('author-' . $author, $ebooks);
|
||||
|
|
|
@ -3,10 +3,10 @@ if(!isset($ebooks)){
|
|||
$ebooks = [];
|
||||
}
|
||||
?>
|
||||
<ol>
|
||||
<ol<? if($view == VIEW_LIST){ ?> class="list"<? } ?>>
|
||||
<? foreach($ebooks as $ebook){ ?>
|
||||
<li>
|
||||
<a href="<?= $ebook->Url ?>">
|
||||
<a href="<?= $ebook->Url ?>" tabindex="-1">
|
||||
<picture>
|
||||
<? if($ebook->CoverImage2xAvifUrl !== null){ ?><source srcset="<?= $ebook->CoverImage2xAvifUrl ?> 2x, <?= $ebook->CoverImageAvifUrl ?> 1x" type="image/avif"/><? } ?>
|
||||
<source srcset="<?= $ebook->CoverImage2xUrl ?> 2x, <?= $ebook->CoverImageUrl ?> 1x" type="image/jpg"/>
|
||||
|
@ -15,9 +15,16 @@ if(!isset($ebooks)){
|
|||
</a>
|
||||
<p><a href="<?= $ebook->Url ?>"><?= Formatter::ToPlainText($ebook->Title) ?></a></p>
|
||||
<? foreach($ebook->Authors as $author){ ?>
|
||||
<? if($author->Name != 'Anonymous'){ ?>
|
||||
<p class="author"><a href="<?= Formatter::ToPlainText($ebook->AuthorsUrl) ?>"><?= Formatter::ToPlainText($author->Name) ?></a></p>
|
||||
<? } ?>
|
||||
<p class="author"><? if($author->Name != 'Anonymous'){ ?><a href="<?= Formatter::ToPlainText($ebook->AuthorsUrl) ?>"><?= Formatter::ToPlainText($author->Name) ?></a><? } ?></p>
|
||||
<? } ?>
|
||||
<? if($view == VIEW_LIST){ ?>
|
||||
<div class="details">
|
||||
<? if($ebook->ContributorsHtml !== null){ ?>
|
||||
<p><?= rtrim($ebook->ContributorsHtml, '.') ?></p>
|
||||
<? } ?>
|
||||
<p><?= number_format($ebook->WordCount) ?> words • <?= $ebook->ReadingEase ?> reading ease</p>
|
||||
<ul class="tags"><? foreach($ebook->Tags as $tag){ ?><li><a href="<?= $tag->Url ?>"><?= Formatter::ToPlainText($tag->Name) ?></a></li><? } ?></ul>
|
||||
</div>
|
||||
<? } ?>
|
||||
</li>
|
||||
<? } ?>
|
||||
|
|
|
@ -1,3 +1,48 @@
|
|||
<?
|
||||
$allSelected = sizeof($tags) == 0 || in_array('all', $tags);
|
||||
?>
|
||||
<form action="/ebooks" method="get">
|
||||
<label class="search">Search ebooks: <input type="search" name="query" placeholder="Search all ebooks..." value="<?= Formatter::ToPlainText($query ?? '') ?>"/></label>
|
||||
<label class="tags">Subjects <span>(select many with <? if(strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false){ ?>ctrl<? }else{ ?>⌘<? } ?>)</span>
|
||||
<select multiple="multiple" name="tags[]">
|
||||
<option value="all">All</option>
|
||||
<? foreach(Library::GetTags() as $tag){
|
||||
$lcTag = mb_strtolower($tag); ?>
|
||||
<option value="<?= $lcTag ?>"<? if(!$allSelected && in_array($lcTag, $tags)){ ?> selected="selected"<? } ?>><?= $tag ?></option>
|
||||
<? } ?>
|
||||
</select>
|
||||
</label>
|
||||
<label class="search">Keywords
|
||||
<input type="search" name="query" value="<?= Formatter::ToPlainText($query ?? '') ?>"/>
|
||||
</label>
|
||||
<label class="select sort">
|
||||
<span>Sort</span>
|
||||
<span>
|
||||
<select name="sort">
|
||||
<option value="<?= SORT_NEWEST ?>"<? if($sort == SORT_NEWEST){ ?> selected="selected"<? } ?>>Release date (newest → oldest)</option>
|
||||
<option value="<?= SORT_AUTHOR_ALPHA ?>"<? if($sort == SORT_AUTHOR_ALPHA){ ?> selected="selected"<? } ?>>Author name (a → z)</option>
|
||||
<option value="<?= SORT_READING_EASE ?>"<? if($sort == SORT_READING_EASE){ ?> selected="selected"<? } ?>>Reading ease (easiest → hardest)</option>
|
||||
<option value="<?= SORT_LENGTH ?>"<? if($sort == SORT_LENGTH){ ?> selected="selected"<? } ?>>Length (shortest → longest)</option>
|
||||
</select>
|
||||
</span>
|
||||
</label>
|
||||
<label class="select view">
|
||||
<span>View</span>
|
||||
<span>
|
||||
<select name="view">
|
||||
<option value="<?= VIEW_GRID ?>"<? if($view == VIEW_GRID){ ?> selected="selected"<? } ?>>Grid</option>
|
||||
<option value="<?= VIEW_LIST ?>"<? if($view == VIEW_LIST){ ?> selected="selected"<? } ?>>List</option>
|
||||
</select>
|
||||
</span>
|
||||
</label>
|
||||
<label class="select per-page">
|
||||
<span>Per page</span>
|
||||
<span>
|
||||
<select name="per-page">
|
||||
<option value="12"<? if($perPage == 12){ ?> selected="selected"<? } ?>>12</option>
|
||||
<option value="24"<? if($perPage == 24){ ?> selected="selected"<? } ?>>24</option>
|
||||
<option value="48"<? if($perPage == 48){ ?> selected="selected"<? } ?>>48</option>
|
||||
</select>
|
||||
</span>
|
||||
</label>
|
||||
<button>Filter</button>
|
||||
</form>
|
||||
|
|
663
www/css/core.css
663
www/css/core.css
|
@ -6,7 +6,7 @@
|
|||
}
|
||||
|
||||
@font-face{
|
||||
/* Note: Don"t use local() as a source, because our version fixes the font"s strange default line-height */
|
||||
/* Note: Don't use local() as a source, because our version fixes the font's strange default line-height */
|
||||
font-family: "League Spartan";
|
||||
src: url("/fonts/league-spartan-bold.woff2") format("woff2");
|
||||
font-weight: bold;
|
||||
|
@ -14,7 +14,7 @@
|
|||
}
|
||||
|
||||
@font-face{
|
||||
/* Note: Don"t use local() as a source, because our version fixes the font"s strange default line-height */
|
||||
/* Note: Don't use local() as a source, because our version fixes the font's strange default line-height */
|
||||
font-family: "Crimson Pro";
|
||||
src: url("/fonts/crimson-pro.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
|
@ -22,7 +22,7 @@
|
|||
}
|
||||
|
||||
@font-face{
|
||||
/* Note: Don"t use local() as a source, because our version fixes the font"s strange default line-height */
|
||||
/* Note: Don't use local() as a source, because our version fixes the font's strange default line-height */
|
||||
font-family: "Crimson Pro";
|
||||
src: url("/fonts/crimson-pro-bold.woff2") format("woff2");
|
||||
font-weight: bold;
|
||||
|
@ -30,7 +30,7 @@
|
|||
}
|
||||
|
||||
@font-face{
|
||||
/* Note: Don"t use local() as a source, because our version fixes the font"s strange default line-height */
|
||||
/* Note: Don't use local() as a source, because our version fixes the font's strange default line-height */
|
||||
font-family: "Crimson Pro";
|
||||
src: url("/fonts/crimson-pro-italic.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
|
@ -38,7 +38,7 @@
|
|||
}
|
||||
|
||||
@font-face{
|
||||
/* Note: Don"t use local() as a source, because our version fixes the font"s strange default line-height */
|
||||
/* Note: Don't use local() as a source, because our version fixes the font's strange default line-height */
|
||||
font-family: "Crimson Pro";
|
||||
src: url("/fonts/crimson-pro-bold-italic.woff2") format("woff2");
|
||||
font-weight: bold;
|
||||
|
@ -67,6 +67,9 @@
|
|||
--light-border: #222;
|
||||
--light-sub-text: #777;
|
||||
--light-body-bg: #e9e7e0;
|
||||
--light-input-hover: #000;
|
||||
--light-input-border: #777;
|
||||
--light-input-outline: #000;
|
||||
--dark-body-text: #fff;
|
||||
--dark-highlight: #3da5bb;
|
||||
--dark-button: #118460;
|
||||
|
@ -74,6 +77,9 @@
|
|||
--dark-border: #000;
|
||||
--dark-sub-text: #aaa;
|
||||
--dark-body-bg: #293542;
|
||||
--dark-input-border: #aaa;
|
||||
--dark-input-hover: #118460;
|
||||
--dark-input-outline: #fff;
|
||||
|
||||
--body-text: var(--light-body-text);
|
||||
--highlight: var(--light-highlight);
|
||||
|
@ -82,6 +88,9 @@
|
|||
--border: var(--light-border);
|
||||
--sub-text: var(--light-sub-text);
|
||||
--body-bg: var(--light-body-bg);
|
||||
--input-hover: var(--light-input-hover);
|
||||
--input-border: var(--light-input-border);
|
||||
--input-outline: var(--light-input-outline);
|
||||
}
|
||||
|
||||
@media(prefers-color-scheme: dark){
|
||||
|
@ -93,6 +102,9 @@
|
|||
--border: var(--dark-border);
|
||||
--sub-text: var(--dark-sub-text);
|
||||
--body-bg: var(--dark-body-bg);
|
||||
--input-hover: var(--dark-input-hover);
|
||||
--input-border: var(--dark-input-border);
|
||||
--input-outline: var(--dark-input-outline);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,9 +131,8 @@ a:hover{
|
|||
color: var(--button-highlight);
|
||||
}
|
||||
|
||||
label.search:focus-within,
|
||||
a:focus{
|
||||
outline: 1px dashed var(--button-highlight);
|
||||
outline: 1px dashed var(--input-outline);
|
||||
}
|
||||
|
||||
main{
|
||||
|
@ -222,9 +233,9 @@ body > header{
|
|||
}
|
||||
|
||||
body > header > a{
|
||||
background: url("/images/logo-white-full.svg");
|
||||
background: url("/images/logo-full.svg");
|
||||
-webkit-filter: drop-shadow(1px 1px 0 rgba(0, 0, 0, .75));
|
||||
filter: drop-shadow(1px 1px 0 rgba(0, 0, 0, .75));
|
||||
filter: invert(100%) drop-shadow(1px 1px 0 rgba(0, 0, 0, .75));
|
||||
height: 70px;
|
||||
width: 300px;
|
||||
background-size: contain;
|
||||
|
@ -239,7 +250,7 @@ body > header > a:visited{
|
|||
}
|
||||
|
||||
body > header a:focus{
|
||||
outline: 1px dashed #fff;
|
||||
outline: 1px dashed var(--input-outline);
|
||||
}
|
||||
|
||||
body > header > a:hover{
|
||||
|
@ -475,7 +486,7 @@ h1 + section > h2:first-child{
|
|||
|
||||
a.button,
|
||||
.ebooks nav > a,
|
||||
aside.sort button{
|
||||
form button{
|
||||
font-style: normal;
|
||||
box-sizing: border-box;
|
||||
background-color: #1d6878; /* fallback for IE */
|
||||
|
@ -491,14 +502,17 @@ aside.sort button{
|
|||
position: relative;
|
||||
text-transform: lowercase;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
a.button:focus,
|
||||
.ebooks nav li.highlighted a:focus,
|
||||
button:focus,
|
||||
a.button:focus,
|
||||
input[type="search"]:focus,
|
||||
select:focus,
|
||||
button:focus,
|
||||
nav a[rel]:focus{
|
||||
outline: 1px dashed #fff;
|
||||
outline: 1px dashed var(--input-outline);
|
||||
}
|
||||
|
||||
select:-moz-focusring,
|
||||
|
@ -509,7 +523,7 @@ select::-moz-focus-inner{
|
|||
|
||||
a.button:active,
|
||||
.ebooks nav > a[href]:active,
|
||||
aside.sort button:active{
|
||||
form button:active{
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
box-shadow: none;
|
||||
|
@ -547,32 +561,19 @@ a[href].button.next:hover::after,
|
|||
transition: all 200ms ease;
|
||||
}
|
||||
|
||||
aside.sort select{
|
||||
margin-left: 1rem;
|
||||
padding: 1rem;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
border: 1px solid #777;
|
||||
border-radius: 5px;
|
||||
color: var(--body-text);
|
||||
font-size: 1rem;
|
||||
text-transform: lowercase;
|
||||
font-family: "Crimson Pro", serif;
|
||||
box-shadow: 1px 1px 0 rgba(255, 255, 255, .5) inset;
|
||||
cursor: pointer;
|
||||
a.button.next:hover::after,
|
||||
.ebooks nav > a:last-child[href]:hover::after{
|
||||
left: .25rem;
|
||||
position: relative;
|
||||
transition: all 200ms ease;
|
||||
}
|
||||
|
||||
aside.sort button{
|
||||
margin-left: 1rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
|
||||
article nav ol li a:hover,
|
||||
main.ebooks nav ol li a:hover,
|
||||
main.ebooks nav ol li.highlighted a:hover,
|
||||
a.button:hover,
|
||||
.ebooks nav > a:hover,
|
||||
aside.sort button:hover{
|
||||
form button:hover{
|
||||
/* fallback for ie */
|
||||
background-color: #288da4;
|
||||
background-color: var(--button-highlight);
|
||||
|
@ -925,30 +926,6 @@ article.ebook aside#reading-ease{
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
aside.sort form{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
margin-top: 2rem;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
aside.sort form label{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
aside.sort a.button{
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
form[action="/ebooks"]{
|
||||
margin: 0 1rem;
|
||||
}
|
||||
|
||||
h2{
|
||||
font-size: 1.2rem;
|
||||
font-family: "League Spartan", sans-serif;
|
||||
|
@ -1048,16 +1025,50 @@ main.ebooks > aside.alert + ol{
|
|||
}
|
||||
|
||||
main.ebooks > ol{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
max-width: none;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
grid-gap: 4rem;
|
||||
margin: 0;
|
||||
margin-bottom: 4rem;
|
||||
list-style: none;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0;
|
||||
margin: auto;
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li{
|
||||
width: calc(25% - 4rem);
|
||||
margin: 2rem;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list > li{
|
||||
display: grid;
|
||||
grid-template-columns: 6rem 1fr;
|
||||
grid-column-gap: 1rem;
|
||||
grid-template-rows: auto auto 1fr;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list > li + li {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list > li > a{
|
||||
grid-row: 1 / span 3;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list ul.tags{
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list > li p{
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
main.ebooks > ol img:hover{
|
||||
|
@ -1080,19 +1091,22 @@ main.ebooks > ol > li p{
|
|||
|
||||
main.ebooks > ol > li img{
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: .25rem;
|
||||
transition: all .2s ease;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li p:nth-of-type(1) a{
|
||||
main.ebooks > ol > li > p:nth-of-type(1) > a{
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
line-height: 1.2;
|
||||
margin-bottom: .25rem;
|
||||
}
|
||||
|
||||
main.ebooks > ol.list > li p.author a,
|
||||
main.ebooks > ol.list > li > p:nth-of-type(1) > a{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li > a:first-child{
|
||||
|
@ -1104,7 +1118,6 @@ main.ebooks > ol > li p.author a{
|
|||
text-decoration: none;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
article nav ol,
|
||||
|
@ -1176,6 +1189,10 @@ ul.tags li{
|
|||
margin: 0;
|
||||
}
|
||||
|
||||
ul.tags li + li{
|
||||
margin-left: .5rem;
|
||||
}
|
||||
|
||||
ul.tags li a{
|
||||
border: 1px solid var(--body-text);
|
||||
border-radius: 5px;
|
||||
|
@ -1197,10 +1214,6 @@ ul.tags li a:hover{
|
|||
background: var(--button-highlight);
|
||||
}
|
||||
|
||||
ul.tags li + li{
|
||||
margin-left: .5rem;
|
||||
}
|
||||
|
||||
figure img{
|
||||
border-radius: .25rem;
|
||||
border: 1px solid var(--border);
|
||||
|
@ -1266,15 +1279,6 @@ p.no-results{
|
|||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
input[type="search"]{
|
||||
font-size: 1rem;
|
||||
width: 100%;
|
||||
background: none;
|
||||
border: none;
|
||||
font-family: "Crimson Pro";
|
||||
color: var(--body-text);
|
||||
}
|
||||
|
||||
/* remove some styles from Chromium / Webkit */
|
||||
input[type="search"],
|
||||
input[type="search"]::-webkit-search-decoration,
|
||||
|
@ -1287,30 +1291,80 @@ input::placeholder{
|
|||
color: rgba(0, 0, 0, .75);
|
||||
}
|
||||
|
||||
main > article > form{
|
||||
max-width: calc(100% - 2rem);
|
||||
select{
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
font-size: 1rem;
|
||||
font-family: "FontAwesome", "Crimson Pro";
|
||||
color: var(--body-text);
|
||||
background: rgba(0, 0, 0, .1);
|
||||
border-radius: 5px;
|
||||
border: 1px solid var(--input-border);
|
||||
padding: 1rem;
|
||||
padding-right: 2rem;
|
||||
line-height: 1.4rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
label.search{
|
||||
input[type="search"]{
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
background: rgba(0, 0, 0, .1);
|
||||
box-shadow: 1px 1px 0 rgba(255, 255, 255, .5) inset;
|
||||
border-radius: 5px;
|
||||
border: 1px solid var(--sub-text);
|
||||
border: 1px solid var(--input-border);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem;
|
||||
font-size: 0;
|
||||
padding-left: 2.5rem;
|
||||
color: inherit;
|
||||
font-size: 1rem;
|
||||
font-family: "Crimson Pro";
|
||||
color: var(--body-text);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
input[type="search"]:focus{
|
||||
outline: none;
|
||||
select,
|
||||
input[type="search"]{
|
||||
box-shadow: 1px 1px 0 rgba(255, 255, 255, .5) inset;
|
||||
}
|
||||
|
||||
label.select > span{
|
||||
display: block;
|
||||
}
|
||||
|
||||
label.select > span + span{
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
label.select > span + span::after{
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: calc((2rem + 1.4rem + 2px) / 2 - 6px);
|
||||
right: calc(1rem - 12px / 2);
|
||||
content: "\f107";
|
||||
font-family: "FontAwesome";
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
color: var(--sub-text);
|
||||
margin-top: -3px; /* Adjust for Crimson Pro line-height */
|
||||
text-shadow: 1px 1px 0 rgba(0, 0, 0, .5);
|
||||
}
|
||||
|
||||
label.select:hover > span + span::after{
|
||||
color: var(--input-outline);
|
||||
}
|
||||
|
||||
label.select > span + span,
|
||||
label.search{
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
label.search::before{
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: calc(2rem + 4px + .7rem);
|
||||
left: 1rem;
|
||||
content: "\f002";
|
||||
font-family: "FontAwesome";
|
||||
font-size: 1rem;
|
||||
|
@ -1319,6 +1373,95 @@ label.search::before{
|
|||
color: var(--body-text);
|
||||
margin-top: -3px; /* Adjust for Crimson Pro line-height */
|
||||
text-shadow: 1px 1px 0 rgba(255, 255, 255, .5);
|
||||
width: 1rem;
|
||||
}
|
||||
|
||||
nav li.highlighted a,
|
||||
nav a[rel],
|
||||
a.button,
|
||||
button,
|
||||
input[type="search"],
|
||||
select{
|
||||
transition: border-color .5s, background-color .5s;
|
||||
}
|
||||
|
||||
a.button:hover,
|
||||
nav li.highlighted a:hover,
|
||||
nav a[rel]:hover,
|
||||
button:hover{
|
||||
transition: none;
|
||||
}
|
||||
|
||||
input[type="search"]:focus,
|
||||
input[type="search"]:hover,
|
||||
select:focus,
|
||||
select:hover{
|
||||
border-color: var(--input-outline);
|
||||
background: rgba(0, 0, 0, .15);
|
||||
transition: none;
|
||||
}
|
||||
|
||||
select[multiple] option:last-child{
|
||||
margin-bottom: 1rem; /* needed for firefox */
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label{
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] select[multiple] option[value="all"]{
|
||||
border-bottom: 1px dashed var(--sub-text);
|
||||
}
|
||||
|
||||
form[action="/ebooks"]{
|
||||
display: grid;
|
||||
grid-gap: 1rem;
|
||||
grid-template-columns: 25% auto auto auto 1fr;
|
||||
margin: 0 1rem;
|
||||
margin-bottom: 4rem;
|
||||
max-width: calc(100% - 2rem);
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-column: 1;
|
||||
grid-row: 1 / span 2;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags span{
|
||||
font-style: italic;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags select{
|
||||
width: 100%;
|
||||
height: calc(100% - 1.4rem);
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 2 / span 4;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort select{
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-column: 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-column: 4;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
height: calc(1.4rem + 2rem + 2px);
|
||||
justify-self: end;
|
||||
margin-top: 1.4rem;
|
||||
}
|
||||
|
||||
article nav ol li:not(:first-child):not(:last-child):not(.highlighted),
|
||||
|
@ -1349,6 +1492,86 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
display: none;
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse){ /* target ipads and smartphones without a mouse */
|
||||
/* For iPad, unset the height so it matches the other elements */
|
||||
select[multiple]{
|
||||
height: calc(1rem + 1.4rem + 1rem + 2px) !important;
|
||||
}
|
||||
|
||||
label.tags > span,
|
||||
select[multiple] option[value="all"]{
|
||||
/* Hide the "all" button, because touchscreen devices
|
||||
have clearer ways to deselect options */
|
||||
display: none;
|
||||
}
|
||||
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: auto auto auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 2 / span 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 1;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-column: 3;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-column: 4;
|
||||
grid-row: 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 1300px){
|
||||
form[action="/ebooks"]{
|
||||
/* We create 5 columns so that the last one can be 1fr wide, pushing
|
||||
the rest into their smallest necessary size */
|
||||
grid-template-columns: 13rem auto auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-row: 1 / span 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 2 / span 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-row: 2;
|
||||
grid-column: 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-row: 3;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 3;
|
||||
grid-column: 3 / span 2;
|
||||
margin-top: 0;
|
||||
align-self: end;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 1100px){
|
||||
article.ebook header{
|
||||
width: calc(100% + 4rem);
|
||||
|
@ -1376,6 +1599,40 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
}
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) and (max-width: 1100px){ /* target ipads and smartphones without a mouse */
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: auto auto auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 2 / span 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 1;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-column: 3;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-column: 4;
|
||||
grid-row: 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 1000px){
|
||||
article.ebook #more-ebooks ul{
|
||||
flex-wrap: wrap;
|
||||
|
@ -1394,20 +1651,6 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
display: none;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li{
|
||||
width: calc(33% - 4rem);
|
||||
}
|
||||
|
||||
aside.sort{
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
aside.sort p{
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
footer ul li{
|
||||
display: inline;
|
||||
}
|
||||
|
@ -1427,6 +1670,46 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
margin-left: 2rem;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-row: 1;
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags select{
|
||||
height: calc((1rem + 1.4rem + 1rem + 2px) * 2); /* Size equal to two regular select boxes */
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-row: 2;
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-row: 3;
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-row: 3;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button,
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-row: 4;
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 900px){
|
||||
main.ebooks > ol{
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 860px){
|
||||
|
@ -1441,6 +1724,83 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
}
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) and (max-width: 768px){ /* target ipads and smartphones without a mouse */
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: auto auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 2 / span 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-column: 1;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-column: 3;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-column: 1;
|
||||
grid-row: 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 3;
|
||||
grid-column: 2 / span 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 700px){
|
||||
main.ebooks > ol{
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (hover: none) and (pointer: coarse) and (max-width: 700px){ /* target ipads and smartphones without a mouse */
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: auto 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search{
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags{
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 3;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-column: 1;
|
||||
grid-row: 4;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-column: 2;
|
||||
grid-row: 4;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 5;
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 680px){
|
||||
body > header{
|
||||
|
@ -1452,24 +1812,11 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li{
|
||||
width: calc(50% - 4rem);
|
||||
}
|
||||
|
||||
main.front-page h1{
|
||||
padding: 3rem;
|
||||
font-size: 2.4rem;
|
||||
}
|
||||
|
||||
aside.sort form{
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
aside.sort form button{
|
||||
margin-left: 0;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
article.ebook section#details ul{
|
||||
flex-direction: column;
|
||||
}
|
||||
|
@ -1489,6 +1836,25 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
main.ebooks nav ol li.highlighted::after{
|
||||
display: none;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.sort{
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.view{
|
||||
grid-row: 4;
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-row: 4;
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 5;
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 500px){
|
||||
|
@ -1519,15 +1885,6 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
padding: 0;
|
||||
}
|
||||
|
||||
main.ebooks > ol{
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
main.ebooks > ol > li{
|
||||
width: calc(50% - 2rem);
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
article nav ol li:not(.highlighted),
|
||||
main.ebooks nav ol li:not(.highlighted){
|
||||
display: none;
|
||||
|
@ -1592,6 +1949,22 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
}
|
||||
}
|
||||
|
||||
@media(max-width: 470px){
|
||||
main.ebooks > ol{
|
||||
grid-gap: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 400px){
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 5;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.tags span{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: 380px){
|
||||
body > header{
|
||||
padding: 1rem 0;
|
||||
|
@ -1635,6 +2008,31 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
footer ul li::after{
|
||||
display: none;
|
||||
}
|
||||
|
||||
main.ebooks > ol{
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
form[action="/ebooks"]{
|
||||
grid-template-columns: 100%;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.search,
|
||||
form[action="/ebooks"] label.tags,
|
||||
form[action="/ebooks"] label.sort,
|
||||
form[action="/ebooks"] label.view,
|
||||
form[action="/ebooks"] label.per-page,
|
||||
form[action="/ebooks"] button{
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] label.per-page{
|
||||
grid-row: 5;
|
||||
}
|
||||
|
||||
form[action="/ebooks"] button{
|
||||
grid-row: 6;
|
||||
}
|
||||
}
|
||||
|
||||
@supports not(hyphens: auto){
|
||||
|
@ -1649,6 +2047,13 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
box-shadow: 3px 3px 1px rgba(0, 0, 0, .5);
|
||||
}
|
||||
|
||||
body > header > a:focus{
|
||||
/* Since we use invert() to change the color of the SE logo,
|
||||
we must specify the light outline (which is dark)
|
||||
so that it inverts to white */
|
||||
outline: 1px dashed var(--light-input-outline);
|
||||
}
|
||||
|
||||
article.ebook section#read-online a::before,
|
||||
article.ebook section#download ul li a[class]::before,
|
||||
article.ebook section#details ul li a[class]::before,
|
||||
|
@ -1656,10 +2061,12 @@ main.ebooks nav ol li.highlighted:nth-last-child(2)::after{
|
|||
main.front-page > section > section figure.oss img + img,
|
||||
main.front-page > section > h2::before,
|
||||
main.front-page > section > h2::after{
|
||||
filter: invert() grayscale(100%) brightness(120%); /* grayscale and brightness makes it hit about #eeeeee */
|
||||
/* brightness(0) ensures the images are stark white when inverted, since the originals are usually not #000 */
|
||||
filter: brightness(0) invert() grayscale(100%) brightness(120%); /* grayscale and brightness makes it hit about #eeeeee */
|
||||
}
|
||||
|
||||
label.search{
|
||||
select,
|
||||
input[type="search"]{
|
||||
box-shadow: 1px 1px 0 rgba(0, 0, 0, .5) inset;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@ catch(\Exception $ex){
|
|||
?><?= Template::Header(['title' => 'Ebooks by ' . strip_tags($ebooks[0]->AuthorsHtml), 'highlight' => 'ebooks', 'description' => 'All of the Standard Ebooks ebooks by ' . strip_tags($ebooks[0]->AuthorsHtml)]) ?>
|
||||
<main class="ebooks">
|
||||
<h1>Ebooks by <?= $ebooks[0]->AuthorsHtml ?></h1>
|
||||
<?= Template::SearchForm() ?>
|
||||
<?= Template::EbookGrid(['ebooks' => $ebooks]) ?>
|
||||
<?= Template::EbookGrid(['ebooks' => $ebooks, 'view' => VIEW_GRID]) ?>
|
||||
<?= Template::ContributeAlert() ?>
|
||||
</main>
|
||||
<?= Template::Footer() ?>
|
||||
|
|
|
@ -5,10 +5,12 @@ use function Safe\preg_replace;
|
|||
|
||||
try{
|
||||
$page = HttpInput::GetInt('page', 1);
|
||||
$perPage = HttpInput::GetInt('per-page', EBOOKS_PER_PAGE);
|
||||
$query = HttpInput::GetString('query', false);
|
||||
$tag = HttpInput::GetString('tag', false);
|
||||
$tags = HttpInput::GetArray('tags', []);
|
||||
$collection = HttpInput::GetString('collection', false);
|
||||
$sort = HttpInput::GetString('sort', false, SORT_NEWEST);
|
||||
$view = Httpinput::GetString('view', false);
|
||||
$sort = HttpInput::GetString('sort', false);
|
||||
$pages = 0;
|
||||
$totalEbooks = 0;
|
||||
|
||||
|
@ -16,30 +18,38 @@ try{
|
|||
$page = 1;
|
||||
}
|
||||
|
||||
if($sort != SORT_AUTHOR_ALPHA && $sort != SORT_NEWEST && $sort != SORT_READING_EASE && $sort != SORT_LENGTH){
|
||||
$sort = SORT_NEWEST;
|
||||
if($perPage != EBOOKS_PER_PAGE && $perPage != 24 && $perPage != 48){
|
||||
$perPage = EBOOKS_PER_PAGE;
|
||||
}
|
||||
|
||||
if($query !== null){
|
||||
$ebooks = Library::Search($query);
|
||||
$pageTitle = 'Search Standard Ebooks';
|
||||
$pageDescription = 'Search results';
|
||||
$pageHeader = 'Search Ebooks';
|
||||
// If we're passed string values that are the same as the defaults,
|
||||
// set them to null so that we can have cleaner query strings in the navigation footer
|
||||
if($view !== null){
|
||||
$view = mb_strtolower($view);
|
||||
}
|
||||
elseif($tag !== null){
|
||||
$tag = strtolower(str_replace('-', ' ', $tag));
|
||||
$ebooks = Library::GetEbooksByTag($tag);
|
||||
$pageTitle = 'Browse ebooks tagged “' . Formatter::ToPlainText($tag) . '”';
|
||||
$pageDescription = 'Page ' . $page . ' of ebooks tagged “' . Formatter::ToPlainText($tag) . '”';
|
||||
$pageHeader = 'Ebooks tagged “' . Formatter::ToPlainText($tag) . '”';
|
||||
|
||||
$pages = ceil(sizeof($ebooks) / EBOOKS_PER_PAGE);
|
||||
|
||||
$totalEbooks = sizeof($ebooks);
|
||||
|
||||
$ebooks = array_slice($ebooks, ($page - 1) * EBOOKS_PER_PAGE, EBOOKS_PER_PAGE);
|
||||
if($sort !== null){
|
||||
$sort = mb_strtolower($sort);
|
||||
}
|
||||
elseif($collection !== null){
|
||||
|
||||
if($view === 'grid'){
|
||||
$view = null;
|
||||
}
|
||||
|
||||
if($sort === 'newest'){
|
||||
$sort = null;
|
||||
}
|
||||
|
||||
if($query === ''){
|
||||
$query = null;
|
||||
}
|
||||
|
||||
if(sizeof($tags) == 1 && mb_strtolower($tags[0]) == 'all'){
|
||||
$tags = [];
|
||||
}
|
||||
|
||||
// Are we looking at a collection?
|
||||
if($collection !== null){
|
||||
$ebooks = Library::GetEbooksByCollection($collection);
|
||||
$collectionObject = null;
|
||||
// Get the *actual* name of the collection, in case there are accent marks (like "Arsène Lupin")
|
||||
|
@ -71,32 +81,47 @@ try{
|
|||
}
|
||||
}
|
||||
else{
|
||||
$ebooks = Library::FilterEbooks($query, $tags, $sort);
|
||||
$pageTitle = 'Browse Standard Ebooks';
|
||||
$pageHeader = 'Browse Ebooks';
|
||||
$ebooks = Library::GetEbooks($sort);
|
||||
}
|
||||
|
||||
$pages = ceil(sizeof($ebooks) / EBOOKS_PER_PAGE);
|
||||
$pages = ceil(sizeof($ebooks) / $perPage);
|
||||
|
||||
$totalEbooks = sizeof($ebooks);
|
||||
$totalEbooks = sizeof($ebooks);
|
||||
|
||||
$ebooks = array_slice($ebooks, ($page - 1) * EBOOKS_PER_PAGE, EBOOKS_PER_PAGE);
|
||||
$ebooks = array_slice($ebooks, ($page - 1) * $perPage, $perPage);
|
||||
|
||||
$pageDescription = 'Page ' . $page . ' of the Standard Ebooks ebook library, sorted ';
|
||||
switch($sort){
|
||||
case SORT_NEWEST:
|
||||
$pageDescription .= 'by newest ebooks first.';
|
||||
break;
|
||||
case SORT_AUTHOR_ALPHA:
|
||||
$pageDescription .= 'alphabetically by author name.';
|
||||
break;
|
||||
case SORT_READING_EASE:
|
||||
$pageDescription .= 'by easiest ebooks first.';
|
||||
break;
|
||||
case SORT_LENGTH:
|
||||
$pageDescription .= 'by shortest ebooks first.';
|
||||
break;
|
||||
if($page > 1){
|
||||
$pageTitle .= ', page ' . $page;
|
||||
}
|
||||
$pageDescription = 'Page ' . $page . ' of the Standard Ebooks ebook library';
|
||||
|
||||
$queryString = '';
|
||||
|
||||
if($collection === null){
|
||||
if($query != ''){
|
||||
$queryString .= '&query=' . urlencode($query);
|
||||
}
|
||||
|
||||
foreach($tags as $tag){
|
||||
$queryString .= '&tags[]=' . urlencode($tag);
|
||||
}
|
||||
|
||||
if($view !== null){
|
||||
$queryString .= '&view=' . urlencode($view);
|
||||
}
|
||||
|
||||
if($sort !== null){
|
||||
$queryString .= '&sort=' . urlencode($sort);
|
||||
}
|
||||
|
||||
if($perPage !== EBOOKS_PER_PAGE){
|
||||
$queryString .= '&per-page=' . urlencode($perPage);
|
||||
}
|
||||
}
|
||||
|
||||
$queryString = preg_replace('/^&/ius', '', $queryString);
|
||||
}
|
||||
catch(\Exception $ex){
|
||||
http_response_code(404);
|
||||
|
@ -106,50 +131,27 @@ catch(\Exception $ex){
|
|||
?><?= Template::Header(['title' => $pageTitle, 'highlight' => 'ebooks', 'description' => $pageDescription]) ?>
|
||||
<main class="ebooks">
|
||||
<h1><?= $pageHeader ?></h1>
|
||||
<?= Template::SearchForm(['query' => $query]) ?>
|
||||
<? if($collection === null){ ?>
|
||||
<?= Template::SearchForm(['query' => $query, 'tags' => $tags, 'sort' => $sort, 'view' => $view, 'perPage' => $perPage]) ?>
|
||||
<? } ?>
|
||||
<? if(sizeof($ebooks) == 0){ ?>
|
||||
<p class="no-results">No ebooks matched your search. You can try different search terms, or <a href="/ebooks">browse all of our ebooks</a>.</p>
|
||||
<p class="no-results">No ebooks matched your filters. You can try different filters, or <a href="/ebooks">browse all of our ebooks</a>.</p>
|
||||
<? }else{ ?>
|
||||
<?= Template::EbookGrid(['ebooks' => $ebooks]) ?>
|
||||
<?= Template::EbookGrid(['ebooks' => $ebooks, 'view' => $view]) ?>
|
||||
<? } ?>
|
||||
<? if(sizeof($ebooks) > 0 && $query === null && $tag === null && $collection === null){ ?>
|
||||
<? if(sizeof($ebooks) > 0){ ?>
|
||||
<nav>
|
||||
<a<? if($page > 1){ ?> href="/ebooks/<? if($page - 1 > 1){ ?>?page=<?= $page - 1 ?><? } ?><? if($sort != SORT_NEWEST){ ?><? if($page - 1 <= 1){ ?>?<? }else{ ?>&<? } ?>sort=<?= $sort ?><? } ?>" rel="previous"<? }else{ ?> aria-disabled="true"<? } ?>>Back</a>
|
||||
<a<? if($page > 1){ ?> href="/ebooks/?page=<?= $page - 1 ?><? if($queryString != ''){ ?>&<?= $queryString ?><? } ?>" rel="previous"<? }else{ ?> aria-disabled="true"<? } ?>>Back</a>
|
||||
<ol>
|
||||
<? for($i = 1; $i < $pages + 1; $i++){ ?>
|
||||
<li<? if($page == $i){ ?> class="highlighted"<? } ?>><a href="/ebooks/<? if($i - 1 >= 1){ ?>?page=<?= $i ?><? } ?><? if($sort != SORT_NEWEST){ ?><? if($i - 1 < 1){ ?>?<? }else{ ?>&<? } ?>sort=<?= $sort ?><? } ?>"><?= $i ?></a></li>
|
||||
<li<? if($page == $i){ ?> class="highlighted"<? } ?>><a href="/ebooks/?page=<?= $i ?><? if($queryString != ''){ ?>&<?= $queryString ?><? } ?>"><?= $i ?></a></li>
|
||||
<? } ?>
|
||||
</ol>
|
||||
<a<? if($page < ceil($totalEbooks / EBOOKS_PER_PAGE)){ ?> href="/ebooks/?page=<?= $page + 1 ?><? if($sort != SORT_NEWEST){ ?>&sort=<?= $sort ?><? } ?>" rel="next"<? }else{ ?> aria-disabled="true"<? } ?>>Next</a>
|
||||
</nav>
|
||||
<? }elseif(sizeof($ebooks) > 0 && $tag !== null){ ?>
|
||||
<nav>
|
||||
<a<? if($page > 1){ ?> href="/tags/<?= Formatter::ToPlainText(str_replace(' ', '-', $tag)) ?>/<? if($page - 1 > 1){ ?>?page=<?= $page - 1 ?><? } ?>" rel="previous"<? }else{ ?> aria-disabled="true"<? } ?>>Back</a>
|
||||
<ol>
|
||||
<? for($i = 1; $i < $pages + 1; $i++){ ?>
|
||||
<li<? if($page == $i){ ?> class="highlighted"<? } ?>><a href="/tags/<?= Formatter::ToPlainText(str_replace(' ', '-', $tag)) ?>/<? if($i - 1 >= 1){ ?>?page=<?= $i ?><? } ?>"><?= $i ?></a></li>
|
||||
<? } ?>
|
||||
</ol>
|
||||
<a<? if($page < ceil($totalEbooks / EBOOKS_PER_PAGE)){ ?> href="/tags/<?= Formatter::ToPlainText(str_replace(' ', '-', $tag)) ?>/?page=<?= $page + 1 ?>" rel="next"<? }else{ ?> aria-disabled="true"<? } ?>>Next</a>
|
||||
<a<? if($page < ceil($totalEbooks / $perPage)){ ?> href="/ebooks/?page=<?= $page + 1 ?><? if($queryString != ''){ ?>&<?= $queryString ?><? } ?>" rel="next"<? }else{ ?> aria-disabled="true"<? } ?>>Next</a>
|
||||
</nav>
|
||||
<? } ?>
|
||||
<? if(sizeof($ebooks) > 0 && $query === null && $tag === null && $collection === null){ ?>
|
||||
<aside class="sort">
|
||||
<form action="/ebooks" method="get">
|
||||
<label>Sort by
|
||||
<select name="sort">
|
||||
<option value="<?= SORT_NEWEST ?>"<? if($sort == SORT_NEWEST){ ?> selected="selected"<? } ?>>newest</option>
|
||||
<option value="<?= SORT_AUTHOR_ALPHA ?>"<? if($sort == SORT_AUTHOR_ALPHA){ ?> selected="selected"<? } ?>>author name</option>
|
||||
<option value="<?= SORT_READING_EASE ?>"<? if($sort == SORT_READING_EASE){ ?> selected="selected"<? } ?>>reading ease</option>
|
||||
<option value="<?= SORT_LENGTH ?>"<? if($sort == SORT_LENGTH){ ?> selected="selected"<? } ?>>length</option>
|
||||
</select>
|
||||
</label>
|
||||
<button>Sort</button>
|
||||
</form>
|
||||
</aside>
|
||||
<? if($page == 1){ ?>
|
||||
<? if(sizeof($ebooks) > 0 && $query === null && sizeof($tags) == 0 && $collection === null && $page == 1){ ?>
|
||||
<?= Template::ContributeAlert() ?>
|
||||
<? } ?>
|
||||
<? } ?>
|
||||
</main>
|
||||
<?= Template::Footer() ?>
|
||||
|
|
Binary file not shown.
|
@ -1,56 +0,0 @@
|
|||
<svg width="600" height="140" fill="#fff" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<g id="laurel">
|
||||
<path d="M56.35 8.23a57.2 57.2 0 00-9.23 7.48 159.9 159.9 0 00-13.83 16.5 96.05 96.05 0 00-8.44 14.01 73.75 73.75 0 00-5.66 16.03 57.86 57.86 0 00.33 26.58c3.02 12.64 12.8 23.2 22.6 31.78 7.63 6.7 17.89 11.07 26.93 14.29l.9-2.45c-8.92-3.19-18.4-7.45-25.72-13.88-9.43-8.3-18.14-18.42-21.88-30.43A51.82 51.82 0 0120.73 65a88.84 88.84 0 016.26-19.88 64.43 64.43 0 017.6-13.28 149.4 149.4 0 0112.47-15.22A59.1 59.1 0 0156.9 8.7z"/>
|
||||
<path d="M52.42 127.4s-6.32-2.01-11.35-1.43c-7.97.96-8.74 5.9-8.74 5.9s3.21 1.99 10.09 1.24c8.05-.9 10-5.71 10-5.71z"/>
|
||||
<path d="M41.65 119.97s-5.36-2.5-10.45-2.47c-8.74.05-9.26 4.73-9.26 4.73s3.16 2.28 10.17 2.2c8.1-.14 9.54-4.43 9.54-4.43z"/>
|
||||
<path d="M33.65 112.22s-5.09-4.45-10.01-5.69c-8.5-2.14-11.3 2.8-11.3 2.8s3.16 3.8 9.98 5.48c7.86 1.92 11.33-2.59 11.33-2.59z"/>
|
||||
<path d="M24.63 100.24s-4.34-4.6-10.28-6.4C6.57 91.43 2.9 96.1 2.8 96.21c0 0 3.2 4.02 9.84 5.78 8.88 2.33 11.99-1.76 11.99-1.76z"/>
|
||||
<path d="M20.34 90.7s-4.07-6.16-10.09-9.07C4.4 78.8.08 81.2 0 81.3c0 0 3.02 5.5 8.55 8.13 7.53 3.58 11.8 1.24 11.8 1.24z"/>
|
||||
<path d="M19.02 82.31c-2.14-2.03-2.3-7.56-5.39-12A13.41 13.41 0 002.1 64.52s.77 7.8 6.16 12.5c5.71 5 10.77 5.28 10.77 5.28z"/>
|
||||
<path d="M18.42 69.2s.22-6.76-1.57-11.9a13.2 13.2 0 00-9.4-8.55s-1.1 7.67 2.83 13.63c4.2 6.33 8.16 6.82 8.16 6.82z"/>
|
||||
<path d="M21.3 56.53s1.38-5.7.7-11.08c-1.05-8.14-7.38-9.87-7.51-9.84 0 0-2.18 7.53.93 13.96 3.27 6.88 5.88 6.96 5.88 6.96z"/>
|
||||
<path d="M26.88 42.9s2.2-5.12 1.93-10.56a13.2 13.2 0 00-5.64-10.72s-4.92 4.42-2.09 14.02c1.74 5.77 5.8 7.28 5.8 7.28z"/>
|
||||
<path d="M33.98 31.73s3.3-5.05 4.17-10.44a19.8 19.8 0 00-1.64-11s-5.34 2.34-5.12 11.33a22 22 0 002.59 10.09z"/>
|
||||
<path d="M42.69 20.93s3.9-4.18 4.95-9.84c.82-4.73 0-9.84-.9-11.1 0 0-5.1 3.16-5.48 11.16-.27 6.04 1.05 8.9 1.43 9.78z"/>
|
||||
<path d="M49.01 14.3s7.45.28 11.16-1.89c4.13-2.4 8.2-7.61 8.52-9.13 0 0-6.51-2.86-12.59 2.37a27.65 27.65 0 00-7.09 8.66z"/>
|
||||
<path d="M40.82 23.27s3.57-4.15 9.68-5.22a15.83 15.83 0 0110.66 1.26s-3.57 4.62-10.44 5.22c-6.05.58-9.02-.88-9.9-1.26z"/>
|
||||
<path d="M33.45 32.89s3.41-4.01 9.51-5.09c4.73-.82 6.99 0 9.32 1.38 0 0-2.86 4.4-9.75 5.03-6.02.55-8.2-.96-9.08-1.32z"/>
|
||||
<path d="M26.3 45.42s3.2-4.94 8.91-7.34c5.86-2.47 8.88-1.29 11.41-.35-.82 1.2-4.12 6.24-9.43 7.75-5.83 1.65-9.95.16-10.88-.06z"/>
|
||||
<path d="M22.07 56.53s2.8-5.14 8.36-7.94c5.66-2.9 8.77-1.93 11.35-1.16-.71 1.27-3.65 6.52-8.88 8.41-5.66 2.04-9.9.85-10.83.69z"/>
|
||||
<path d="M19.85 69.78c2.42-3.13 3.76-6.46 7.47-9.79 4.62-4.12 8.58-2.8 11.27-2.53-1.34 2.48-3.3 6.38-7.42 9.35-4.9 3.52-10.36 2.94-11.32 2.97z"/>
|
||||
<path d="M20.15 81.96c2.06-3.36 3.02-6 6.38-9.7 4.12-4.6 8.02-3.8 10.72-3.86a25.51 25.51 0 01-6.52 9.93c-4.48 4.07-9.62 3.49-10.58 3.63z"/>
|
||||
<path d="M22.82 91.66c3.1-4.78 2.72-5.85 5.77-9.84 3.24-4.26 7.37-4.15 10.06-4.4-.83 2.67-2.06 6.32-5.55 9.95-3.71 3.9-7.56 3.41-10.28 4.29z"/>
|
||||
<path d="M27.9 101.2c1.98-4.23 1.65-6.87 3.44-9.9 2.94-4.95 5.8-5.14 8.5-5.39-2.15 6.13-1.66 6.16-4 9.9-2.3 3.63-5.41 4.12-7.94 5.39z"/>
|
||||
<path d="M34.09 109.2c1.1-4.54-.03-5.91 1.15-9.21 1.95-5.39 4.73-6.16 7.31-6.9-.27 3.6.17 5.91-1.87 9.81-1.43 2.78-4.4 4.57-6.6 6.33z"/>
|
||||
<path d="M46.46 100.3s2.25 4.3 1.5 9.34c-1.04 7.03-4.8 8.13-4.8 8.13s-2.17-3.21-1.93-9.75c.22-6.99 5.28-7.7 5.28-7.7z"/>
|
||||
<path d="M54.57 107.52s2.22 4.4 1.73 9.4c-.6 6.46-4.15 8.08-4.15 8.08s-2.23-3.6-2.34-9.04c-.14-8.3 4.76-8.44 4.76-8.44z"/>
|
||||
</g>
|
||||
</defs>
|
||||
<path d="M112.99 139.91a1 1 0 001.02-1.02v-4.15h2.55c.2 0 .36-.16.36-.35v-3.96a7.02 7.02 0 00-5.5-6.87v-2.1a1.51 1.51 0 10-3.02 0v2.07a7.04 7.04 0 00-5.5 6.87v3.99c0 .19.17.35.36.35h2.55v4.15a1.02 1.02 0 102.04 0v-4.15h4.12v4.15c0 .55.47 1.02 1.02 1.02z" stroke-width="2.75"/>
|
||||
<path d="M109.91 126.94v-7.01s-22.82-9-31.45-5.23a3.3 3.3 0 000 6.1c17.32 7.54 43.38-19.76 60.67-12.23 5.44 2.4 5.94 10.31 0 12.24-10.72 3.46-29.22-10.86-29.22-10.86v-5" fill="none" stroke="#fff" stroke-width="3.05" stroke-linejoin="round"/>
|
||||
<path d="M64.94 38.48c-2.64 0-5 2.36-5 4.97v54c0 2.6 2.36 5 5 5h35v.32a3.99 4.67 0 003.98 4.68h11.98a3.99 4.67 0 004.02-4.68v-.27h35.07a5.27 5.27 0 004.9-5.06V43.45a5.17 5.17 0 00-5-4.97h-3.03v58.08l-17.84.2-17.87.19-2.28 1.1c-2.92 1.4-3.71 1.56-5.47 1.01a25.84 25.84 0 01-3.27-1.37l-1.84-.94H67.93V38.48z" stroke-width="2.75"/>
|
||||
<path d="M64.94 32.46v67.2h37.44c.27.17 1.02.64 2.33 1.25 1.57.74 3.39 1.53 5.2 1.53s3.63-.82 5.2-1.53c1.32-.61 2.03-1.1 2.33-1.24h37.44V32.46h-38.26l-.36.27s-1.1.69-2.47 1.38a12.37 12.37 0 01-3.74 1.32h-.22a12.31 12.31 0 01-3.8-1.3c-1.37-.71-2.47-1.42-2.47-1.42l-.36-.25H75.9zm3.98 4.01h33.43c.3.2 1.02.63 2.31 1.32 1.13.55 1.92 1.1 3.24 1.38v37.8c0 .76 1.21 1.5 2.01 1.5.8 0 2-.74 2-1.5v-37.8c1.33-.3 2.12-.83 3.25-1.4 1.3-.7 2-1.13 2.31-1.33h33.43v60.2h-34.25l-.33.22s-1.1.64-2.5 1.3c-1.38.66-3.17 1.26-3.91 1.26-.74 0-2.5-.6-3.9-1.26-1.38-.66-2.5-1.3-2.5-1.3l-.33-.22H68.92z" stroke-width="2.75"/>
|
||||
<path d="M88.69 52.47c-4.67 0-9.43 3.44-9.43 8.82 0 3.03 2.03 5.72 5.5 7.43 3.43 1.73 6.54 2.69 6.54 4.78 0 2.7-2.75 2.86-4.18 2.86-3.24 0-7.09-3.3-7.09-3.3l-3.3 5.55s4.12 3.85 10.89 3.85c5.63 0 10.88-2.42 10.88-9.35 0-3.79-3.52-6.51-6.76-7.89-3.3-1.4-6.05-2.55-6.05-4.17 0-1.57 1.21-2.59 3.47-2.59 2.97 0 5.85 2 5.85 2l2.67-5.27s-3.71-2.75-9-2.75z" font-weight="700" font-size="35.09" font-family="'League Spartan'" stroke-width="2.75"/>
|
||||
<path d="M140.37 52.47H123.2v29.96h17.16v-5.99h-10.31v-6.05h9.9v-5.93h-9.9v-5.97h10.3v-6z" font-weight="700" font-size="36.36" font-family="'League Spartan'" stroke-width="2.75"/>
|
||||
<use xlink:href="#laurel"/>
|
||||
<use xlink:href="#laurel" transform="scale(-1, 1)" x="-219.8388"/>
|
||||
<g font-family="League Spartan" font-weight="700" font-size="42.31">
|
||||
<path d="M274.427 12.144v9.155q-3.563-1.594-6.952-2.405-3.39-.811-6.403-.811-3.998 0-5.91 1.1-1.912 1.102-1.912 3.42 0 1.737 1.275 2.722 1.303.957 4.693 1.652l4.751.956q7.214 1.448 10.256 4.403 3.042 2.955 3.042 8.402 0 7.156-4.26 10.661-4.229 3.477-12.949 3.477-4.114 0-8.257-.783-4.142-.782-8.285-2.317V42.36q4.143 2.202 7.996 3.332 3.882 1.1 7.474 1.1 3.65 0 5.591-1.216 1.941-1.217 1.941-3.476 0-2.028-1.332-3.13-1.304-1.1-5.244-1.97l-4.317-.955q-6.489-1.39-9.502-4.433-2.984-3.042-2.984-8.199 0-6.46 4.172-9.937Q251.483 10 259.305 10q3.563 0 7.33.55 3.766.522 7.792 1.594z"/>
|
||||
<path d="M281.93 10.782h39.865v8.43h-14.341v34.823H296.3V19.213h-14.37v-8.43z"/>
|
||||
<path d="M349.143 46.155h-17.44l-2.753 7.88h-11.21l16.02-43.253h13.298l16.02 43.253h-11.21l-2.724-7.88zm-14.66-8.024h11.85l-5.91-17.209-5.94 17.209z"/>
|
||||
<path d="M368.785 10.782h12.457l15.731 29.666V10.782h10.575v43.253H395.09L379.36 24.37v29.666h-10.575V10.782z"/>
|
||||
<path d="M429.652 19.213v26.392h3.998q6.837 0 10.43-3.39 3.621-3.39 3.621-9.85 0-6.431-3.592-9.792-3.593-3.36-10.459-3.36h-3.998zm-11.153-8.43h11.762q9.85 0 14.659 1.419 4.838 1.39 8.286 4.751 3.041 2.926 4.519 6.75 1.477 3.824 1.477 8.662 0 4.896-1.477 8.75-1.478 3.824-4.52 6.75-3.476 3.36-8.343 4.78-4.867 1.39-14.601 1.39h-11.762V10.782z"/>
|
||||
<path d="M493.996 46.155h-17.44l-2.752 7.88h-11.212l16.02-43.253h13.298l16.021 43.253H496.72l-2.724-7.88zm-14.659-8.024h11.85l-5.91-17.209-5.94 17.209z"/>
|
||||
<path d="M529.485 29.96q3.506 0 5.012-1.303 1.536-1.304 1.536-4.288 0-2.955-1.536-4.23-1.506-1.274-5.012-1.274h-4.693v11.096h4.693zm-4.693 7.707v16.368h-11.154V10.782h17.035q8.546 0 12.515 2.868 3.998 2.868 3.998 9.068 0 4.288-2.085 7.04-2.057 2.752-6.23 4.056 2.29.521 4.086 2.376 1.825 1.825 3.679 5.562l6.055 12.283h-11.878l-5.273-10.748q-1.593-3.244-3.244-4.432-1.623-1.188-4.346-1.188h-3.158z"/>
|
||||
<path d="M570.45 19.213v26.392h3.998q6.837 0 10.43-3.39 3.62-3.39 3.62-9.85 0-6.431-3.592-9.792-3.592-3.36-10.458-3.36h-3.998zm-11.154-8.43h11.762q9.85 0 14.66 1.419 4.838 1.39 8.285 4.751 3.042 2.926 4.52 6.75Q600 27.527 600 32.365q0 4.896-1.478 8.75-1.477 3.824-4.519 6.75-3.476 3.36-8.343 4.78-4.868 1.39-14.602 1.39h-11.762V10.782z"/>
|
||||
</g>
|
||||
<g font-family="League Spartan" font-weight="700" font-size="58.48">
|
||||
<path d="M281.846 61.114H243.14v67.656h38.707v-13.531h-23.29v-13.613h22.306V88.094h-22.306V74.645h23.29V61.114z"/>
|
||||
<path d="M290.71 61.114v67.656h25.668c14.023 0 22.142-7.709 22.142-18.862 0-10.907-5.987-15.581-14.433-17.057 5.74-2.952 8.446-8.283 8.446-14.515 0-12.876-9.185-17.222-20.83-17.222H290.71zm15.417 26.488V73.005h1.23c6.725 0 10.251 2.05 10.251 6.889 0 5.658-3.608 7.708-10.25 7.708h-1.231zm0 29.277v-15.992h4.838c7.3 0 11.317 2.215 11.317 8.447 0 5.33-4.018 7.545-11.317 7.545h-4.838z"/>
|
||||
<path d="M342.293 94.9c0 19.765 14.106 35.1 34.115 35.1 19.436 0 34.033-15.335 34.033-35.1 0-19.763-15.253-35.016-34.033-35.016-18.615 0-34.115 15.253-34.115 35.017zm16.648 0c0-10.086 5.576-20.173 17.467-20.173 11.973 0 17.386 10.087 17.386 20.174s-5.085 20.174-17.386 20.174c-12.629 0-17.467-10.087-17.467-20.174z"/>
|
||||
<path d="M414.21 94.9c0 19.765 14.105 35.1 34.115 35.1 19.435 0 34.033-15.335 34.033-35.1 0-19.763-15.254-35.016-34.033-35.016-18.616 0-34.115 15.253-34.115 35.017zm16.647 0c0-10.086 5.577-20.173 17.468-20.173 11.973 0 17.385 10.087 17.385 20.174s-5.084 20.174-17.385 20.174c-12.63 0-17.468-10.087-17.468-20.174z"/>
|
||||
<path d="M550.748 128.77l-31.49-35.591 27.225-32.065h-18.697L504.578 88.75V61.114H489.16v67.656h15.418v-28.703l24.93 28.703h21.24z"/>
|
||||
<path d="M577.038 59.884c-10.907 0-22.06 8.037-22.06 20.666 0 7.052 4.756 13.367 12.875 17.385 8.036 4.019 15.253 6.233 15.253 11.153 0 6.315-6.396 6.643-9.759 6.643-7.544 0-16.565-7.627-16.565-7.627l-7.709 12.957S558.668 130 574.495 130c13.203 0 25.505-5.658 25.505-21.814 0-8.857-8.283-15.253-15.828-18.452-7.709-3.28-14.105-5.986-14.105-9.758 0-3.69 2.788-6.069 8.037-6.069 6.97 0 13.695 4.675 13.695 4.675l6.232-12.302s-8.692-6.396-20.993-6.396z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 9.7 KiB |
|
@ -1,71 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" height="140" version="1.1" width="220">
|
||||
|
||||
<g id="layer1" transform="translate(-216.19046,-210.21929)">
|
||||
<g id="g1794">
|
||||
<path d="M 326.19046,337.21929 326.19046,330.21929 C 326.19046,330.21929 303.38763,321.21152 294.74115,324.97748 292.00689,326.16839 292.00689,329.89681 294.74115,331.0877 312.0341,338.61964 338.1164,311.33533 355.40936,318.86727 360.87788,321.24907 361.35266,329.1656 355.40936,331.0877 344.69495,334.55283 326.19046,320.21929 326.19046,320.21929 L 326.19046,315.21929" id="path1570-7" style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
|
||||
<path d="M 329.28416,350.21768 C 329.84712,350.21754 330.30075,349.76032 330.30059,349.19314 L 330.29957,345.02477 332.85017,345.02417 C 333.02848,345.02449 333.19083,344.86079 333.19046,344.68116 L 333.18947,340.70987 C 333.18861,337.33681 330.84848,334.52553 327.71177,333.82732 L 327.71014,331.75381 C 327.70995,330.90319 327.03053,330.21907 326.1862,330.21929 325.34187,330.2195 324.6628,330.90396 324.66303,331.75459 L 324.66466,333.82808 C 321.52835,334.52791 319.18964,337.34036 319.19046,340.71339 L 319.19146,344.68468 C 319.19113,344.86433 319.35364,345.02786 319.53195,345.02751 L 322.08253,345.0269 322.08357,349.19528 C 322.08369,349.76243 322.53754,350.21944 323.10051,350.21929 323.66349,350.21916 324.1171,349.76193 324.11696,349.19475 L 324.11594,345.02638 328.26593,345.0253 328.26698,349.19367 C 328.26711,349.76083 328.72094,350.21783 329.28393,350.21768 Z" id="path2821-0" style="color:#000000;fill:#ffffff;fill-opacity:1"/>
|
||||
<g id="g1012-0" style="fill:#ffffff;fill-opacity:1" transform="matrix(2.4863146,0,0,2.4844821,215.00654,-656.21698)">
|
||||
<path d="M 23.145204,352.06045 C 21.906354,352.89256 20.537174,353.92299 19.433684,355.0723 17.475774,357.11147 15.534004,359.41036 13.865104,361.71054 12.737684,363.26442 11.274974,365.62235 10.475804,367.35679 9.4122943,369.66504 8.7823643,371.28215 8.1986643,373.8182 7.3763843,377.39098 7.4897743,381.05757 8.3249343,384.51425 9.5536843,389.5997 13.486224,393.85473 17.415994,397.3087 20.490274,400.01053 24.623514,401.77811 28.255054,403.07647 L 28.630294,402.08488 C 25.031964,400.79913 21.218094,399.08164 18.271784,396.48913 14.481634,393.15377 10.980904,389.08642 9.4708143,384.23961 8.5510643,381.28923 8.3375643,378.05216 8.8201443,374.91742 9.2429043,372.17133 10.305694,369.41921 11.341004,366.91691 12.192164,364.85992 13.184564,363.25751 14.395084,361.56977 15.929914,359.42975 17.616504,357.34279 19.409364,355.43721 20.569934,354.20372 22.122044,353.09013 23.368624,352.25287 Z" id="path3035-9" style="text-indent:0;text-transform:none;block-progression:tb;color:#000000;fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 21.571394,400.04578 C 21.571394,400.04578 19.020644,399.23936 16.996384,399.47692 13.782694,399.85406 13.486434,401.84915 13.486434,401.84915 13.486434,401.84915 14.775704,402.64954 17.540984,402.34538 20.780494,401.98905 21.571334,400.04574 21.571334,400.04574 Z" id="path3809-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 17.227504,397.06626 C 17.227504,397.06626 15.077864,396.04661 13.039774,396.06172 9.5113843,396.08786 9.2998543,397.96194 9.2998543,397.96194 9.2998543,397.96194 10.576994,398.88339 13.402864,398.8455 16.661624,398.80178 17.227504,397.06633 17.227504,397.06633 Z" id="path3811-0" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 14.014154,393.93288 C 14.014154,393.93288 11.970174,392.14151 9.9931543,391.64612 6.5705043,390.78852 5.4368443,392.78004 5.4368443,392.78004 5.4368443,392.78004 6.7091043,394.30641 9.4545243,394.9768 12.620504,395.74987 14.014154,393.93288 14.014154,393.93288 Z" id="path3813-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 10.385314,389.10641 C 10.385314,389.10641 8.6373243,387.26387 6.2444843,386.52868 3.1217543,385.56921 1.6539543,387.4529 1.6111143,387.5 1.6111143,387.5 2.8906943,389.11054 5.5603343,389.81659 9.1411843,390.76365 10.385314,389.10641 10.385314,389.10641 Z" id="path3815-7" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 8.6569743,385.26543 C 8.6569743,385.26543 7.0290143,382.78638 4.6008743,381.61626 2.2421343,380.47895 0.51894429,381.4475 0.47617429,381.48545 0.47617429,381.48545 1.6878443,383.69976 3.9170643,384.76082 6.9458543,386.20253 8.6573143,385.26517 8.6573143,385.26517 Z" id="path3817-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 8.1323743,381.89483 C 7.2634643,381.07743 7.1987343,378.85567 5.9567743,377.05277 4.2241643,374.53753 1.3661643,374.71985 1.3233943,374.74357 1.3233943,374.74357 1.6293643,377.87722 3.7960043,379.77121 6.0986343,381.78401 8.1323043,381.89503 8.1323043,381.89503 Z" id="path3819-9" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 7.8924443,376.61289 C 7.8924443,376.61289 7.9767943,373.88923 7.2585443,371.82092 6.2565843,368.93568 3.5214043,368.36926 3.4738943,368.38058 3.4738943,368.38058 3.0303243,371.46576 4.6158143,373.86734 6.3008443,376.41966 7.8924743,376.61282 7.8924743,376.61282 Z" id="path3821-6" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 9.0507643,371.50853 C 9.0507643,371.50853 9.5963443,369.22204 9.3199543,367.05009 8.9033743,363.77662 6.3560243,363.08366 6.3073643,363.0884 6.3073643,363.0884 5.4341043,366.12032 6.6764043,368.71608 7.9966543,371.47478 9.0507343,371.50853 9.0507343,371.50853 Z" id="path3823-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 11.294894,366.028 C 11.294894,366.028 12.182044,363.95969 12.068384,361.77324 11.910604,358.73875 9.8544143,357.4568 9.8056143,357.45503 9.8056143,357.45503 7.8230343,359.24261 8.9617043,363.09044 9.6524343,365.42451 11.294964,366.02807 11.294964,366.02807 Z" id="path3830-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 14.149704,361.52212 C 14.149704,361.52212 15.468054,359.49136 15.832774,357.33249 16.175164,355.30573 15.352884,353.09765 15.169324,352.89473 15.169324,352.89473 13.024154,353.83752 13.104464,357.45578 13.158494,359.88935 14.149744,361.52212 14.149744,361.52212 Z" id="path3832-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 17.657214,357.17416 C 17.657214,357.17416 19.229124,355.50025 19.638574,353.21145 19.977464,351.31475 19.635864,349.25362 19.278674,348.73919 19.278674,348.73919 17.228384,350.01308 17.079414,353.2347 16.966984,355.66624 17.494634,356.82355 17.657244,357.17443 Z" id="path3834-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 20.201604,354.50757 C 20.201604,354.50757 23.197324,354.61581 24.686204,353.75137 26.352794,352.78377 27.988284,350.68354 28.117334,350.07042 28.117334,350.07042 25.493504,348.91989 23.047124,351.02148 21.200724,352.60762 20.345364,354.14855 20.201604,354.50757 Z" id="path3836-9" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 16.900814,358.1217 C 16.900814,358.1217 18.333714,356.44406 20.795954,356.01062 22.693874,355.67656 24.152924,355.985 25.089684,356.53083 25.089684,356.53083 23.644524,358.38239 20.874574,358.63764 18.450694,358.86097 17.256854,358.27263 16.900744,358.12169 Z" id="path3838-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 13.939594,361.98979 C 13.939594,361.98979 15.303964,360.3806 17.766274,359.94723 19.664194,359.61317 20.575534,359.95585 21.512294,360.50168 21.512294,360.50168 20.358104,362.26771 17.588154,362.52289 15.164274,362.74621 14.295634,362.14076 13.939524,361.98982 Z" id="path3840-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 11.065134,367.03586 C 11.065134,367.03586 12.339694,365.05254 14.644354,364.08331 17.005944,363.0901 18.218894,363.56435 19.234614,363.94352 18.910694,364.42939 17.585104,366.45469 15.435934,367.06266 13.093724,367.72528 11.441634,367.12426 11.065134,367.03585 Z" id="path3842-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 9.3591543,371.51734 C 9.3591543,371.51734 10.488614,369.44794 12.717964,368.31632 15.002494,367.15671 16.246214,367.54298 17.286474,367.84851 16.998144,368.35631 15.820844,370.47125 13.720674,371.23145 11.431814,372.0599 9.7410243,371.57863 9.3591543,371.51738 Z" id="path3844-6" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 8.4631343,376.84334 C 9.4405643,375.59019 9.9719443,374.24297 11.475794,372.90211 13.328574,371.25016 14.918374,371.7768 15.997334,371.88348 15.466194,372.8811 14.668684,374.45925 13.020524,375.64828 11.046424,377.07236 8.8497343,376.83256 8.4631343,376.8434 Z" id="path3846-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 8.5844543,381.75046 C 9.4155543,380.39585 9.8099543,379.33994 11.154324,377.8392 12.810614,375.99035 14.380894,376.3186 15.465004,376.30389 15.048824,377.35465 14.347344,378.92656 12.842544,380.29256 11.040184,381.92858 8.9673343,381.69644 8.5844543,381.75046 Z" id="path3848-1" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 9.6533143,385.66329 C 10.903684,383.7329 10.745894,383.29601 11.969694,381.69543 13.284044,379.97644 14.944134,380.02368 16.023564,379.92202 15.692994,381.0028 15.199044,382.46484 13.797944,383.93698 12.303774,385.50692 10.749624,385.30481 9.6533843,385.66329 Z" id="path3850-4" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 11.707664,389.49749 C 12.495924,387.78962 12.359824,386.72313 13.082614,385.51255 14.264794,383.53255 15.423734,383.44708 16.503164,383.34548 15.642174,385.81233 15.841514,385.82372 14.893704,387.32622 13.971454,388.78826 12.718304,388.98502 11.707664,389.49756 Z" id="path3852-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 14.184274,392.72169 C 14.633504,390.89507 14.177374,390.33611 14.656894,389.01017 15.441154,386.84154 16.562744,386.53735 17.603134,386.23242 17.483494,387.68822 17.664124,388.61183 16.848154,390.18977 16.271934,391.30404 15.079084,392.02642 14.184274,392.72169 Z" id="path3854-6" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 19.176124,389.13555 C 19.176124,389.13555 20.077094,390.87501 19.777814,392.891 19.353794,395.74743 17.827364,396.17538 17.827364,396.17538 17.827364,396.17538 16.957974,394.8771 17.046354,392.24277 17.140734,389.4289 19.176144,389.13549 19.176144,389.13549 Z" id="path3856-7" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 22.428114,392.04526 C 22.428114,392.04526 23.329764,393.80641 23.132524,395.835 22.879684,398.4347 21.455974,399.08516 21.455974,399.08516 21.455974,399.08516 20.559134,397.6339 20.520904,395.44358 20.462594,392.09901 22.428184,392.04533 22.428184,392.04533 Z" id="path3858-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
</g>
|
||||
<g id="g986-6" style="fill:#ffffff;fill-opacity:1" transform="matrix(2.4862629,0,0,2.4844666,186.38029,-656.21074)">
|
||||
<path d="M 77.804094,352.06045 C 79.042944,352.89256 80.412124,353.92299 81.515614,355.0723 83.473524,357.11147 85.415294,359.41036 87.084194,361.71054 88.211614,363.26442 89.674324,365.62235 90.473494,367.35679 91.537004,369.66504 92.166934,371.28215 92.750634,373.8182 93.572914,377.39098 93.459594,381.05757 92.624364,384.51425 91.395614,389.5997 87.463074,393.85473 83.533304,397.3087 80.459024,400.01053 76.325784,401.77811 72.694244,403.07647 L 72.321464,402.08555 C 75.920344,400.79899 79.734344,399.0817 82.680654,396.48899 86.470594,393.15411 89.970854,389.08696 91.481624,384.23948 92.401104,381.28903 92.614604,378.05168 92.132074,374.91729 91.709314,372.1712 90.646524,369.41907 89.611214,366.91677 88.760054,364.85978 87.767654,363.25737 86.557134,361.56963 85.022304,359.42961 83.335714,357.34266 81.542854,355.43708 80.382284,354.20359 78.830174,353.08999 77.583604,352.25273 Z" id="path3862-9" style="text-indent:0;text-transform:none;block-progression:tb;color:#000000;fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 79.383324,400.04578 C 79.383324,400.04578 81.934084,399.23936 83.958334,399.47692 87.172034,399.85406 87.468284,401.84915 87.468284,401.84915 87.468284,401.84915 86.179014,402.64954 83.413674,402.34538 80.174154,401.98905 79.383324,400.04574 79.383324,400.04574 Z" id="path3864-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 83.721114,397.06626 C 83.721114,397.06626 85.870764,396.04661 87.908844,396.06172 91.437234,396.08786 91.648764,397.96194 91.648764,397.96194 91.648764,397.96194 90.371624,398.88339 87.545754,398.8455 84.286994,398.80178 83.721114,397.06633 83.721114,397.06633 Z" id="path3866-1" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 86.940564,393.93288 C 86.940564,393.93288 88.984554,392.14151 90.961564,391.64612 94.384224,390.78852 95.517874,392.78004 95.517874,392.78004 95.517874,392.78004 94.245614,394.30641 91.500194,394.9768 88.334224,395.74987 86.940564,393.93288 86.940564,393.93288 Z" id="path3868-4" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 90.566694,389.10641 C 90.566694,389.10641 92.314684,387.26387 94.707524,386.52868 97.830254,385.56921 99.298054,387.4529 99.340894,387.5 99.340894,387.5 98.061314,389.11054 95.391744,389.81659 91.810894,390.76365 90.566764,389.10641 90.566764,389.10641 Z" id="path3870-4" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 92.295034,385.26543 C 92.295034,385.26543 93.922994,382.78638 96.351134,381.61626 98.710214,380.47935 100.43333,381.4476 100.47617,381.48573 100.47617,381.48573 99.264504,383.70004 97.035284,384.7611 94.006494,386.20281 92.295034,385.26544 92.295034,385.26545 Z" id="path3872-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 92.816924,381.89483 C 93.685634,381.0775 93.750494,378.8558 94.992464,377.0527 96.725064,374.53739 99.582994,374.71985 99.625764,374.74337 99.625764,374.74337 99.319804,377.87702 97.153154,379.77101 94.850534,381.78381 92.816854,381.89483 92.816854,381.89483 Z" id="path3874-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 93.060924,376.61289 C 93.060924,376.61289 92.976574,373.88923 93.694814,371.82092 94.696774,368.93568 97.431964,368.36926 97.479474,368.38058 97.479474,368.38058 97.923034,371.46576 96.337544,373.86734 94.652584,376.41966 93.060884,376.61282 93.060884,376.61282 Z" id="path3876-9" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 91.901914,371.50853 C 91.901914,371.50853 91.356334,369.22204 91.632734,367.05009 92.049304,363.77662 94.596664,363.08366 94.645324,363.0884 94.645324,363.0884 95.518584,366.12032 94.276284,368.71608 92.956034,371.47478 91.901954,371.50853 91.901954,371.50853 Z" id="path3878-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 89.658464,366.028 C 89.658464,366.028 88.771324,363.95969 88.884984,361.77324 89.042764,358.73875 91.098954,357.4568 91.147754,357.45503 91.147754,357.45503 93.130324,359.24261 91.991654,363.09044 91.300934,365.42451 89.658394,366.02807 89.658394,366.02807 Z" id="path3880-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 86.798234,361.52212 C 86.798234,361.52212 85.479884,359.49136 85.115174,357.33249 84.772784,355.30573 85.595064,353.09765 85.778614,352.89473 85.778614,352.89473 87.923794,353.83752 87.843474,357.45578 87.789444,359.88935 86.798204,361.52212 86.798204,361.52212 Z" id="path3882-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 83.294114,357.17416 C 83.294114,357.17416 81.722204,355.50025 81.312754,353.21145 80.973404,351.31441 81.315064,349.25329 81.672684,348.73885 81.672684,348.73885 83.722964,350.01274 83.871944,353.23436 83.984374,355.6659 83.456724,356.82321 83.294124,357.17409 Z" id="path3884-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 80.752434,354.50757 C 80.752434,354.50757 77.756714,354.61581 76.267834,353.75137 74.601244,352.78377 72.965764,350.68354 72.836714,350.07042 72.836714,350.07042 75.460534,348.91989 77.906914,351.02148 79.753324,352.60762 80.608684,354.14855 80.752434,354.50757 Z" id="path3886-7" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 84.053224,358.1217 C 84.053224,358.1217 82.620334,356.44406 80.158094,356.01062 78.260174,355.67656 76.801114,355.985 75.864354,356.53083 75.864354,356.53083 77.309514,358.38239 80.079474,358.63764 82.503344,358.86097 83.697184,358.27263 84.053294,358.12169 Z" id="path3888-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 87.008344,361.98979 C 87.008344,361.98979 85.643974,360.3806 83.181664,359.94723 81.283754,359.61317 80.372404,359.95585 79.435644,360.50168 79.435644,360.50168 80.589834,362.26771 83.359794,362.52289 85.783664,362.74621 86.652314,362.14076 87.008414,361.98982 Z" id="path3890-7" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 89.888914,367.03586 C 89.888914,367.03586 88.614344,365.05254 86.309694,364.08331 83.948104,363.0901 82.735144,363.56435 81.719424,363.94352 82.043334,364.42939 83.368944,366.45469 85.518114,367.06266 87.860314,367.72528 89.512404,367.12426 89.888914,367.03585 Z" id="path3892-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 91.590144,371.51734 C 91.590144,371.51734 90.460684,369.44794 88.231334,368.31632 85.946804,367.15671 84.703084,367.54298 83.662824,367.84851 83.951154,368.35631 85.128454,370.47125 87.228624,371.23145 89.517484,372.0599 91.208274,371.57863 91.590144,371.51738 Z" id="path3894-0" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 92.484814,376.84334 C 91.507384,375.59019 90.976004,374.24297 89.472144,372.90211 87.619364,371.25016 86.029564,371.7768 84.950604,371.88348 85.481754,372.8811 86.279254,374.45925 87.927414,375.64828 89.901514,377.07236 92.098204,376.83256 92.484814,376.8434 Z" id="path3896-3" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 92.369584,381.75046 C 91.538494,380.39585 91.144094,379.33994 89.799714,377.8392 88.143424,375.99035 86.573144,376.3186 85.489034,376.30389 85.905224,377.35465 86.606694,378.92656 88.111504,380.29256 89.913854,381.92858 91.986644,381.69644 92.369584,381.75046 Z" id="path3898-1" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 91.298694,385.66329 C 90.048324,383.7329 90.206114,383.29601 88.982314,381.69543 87.667964,379.97644 86.007874,380.02368 84.928444,379.92202 85.259014,381.0028 85.753034,382.46484 87.154074,383.93698 88.648234,385.50692 90.202384,385.30481 91.298624,385.66329 Z" id="path3900-8" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 89.245024,389.49749 C 88.456764,387.78962 88.592874,386.72313 87.870074,385.51255 86.687894,383.53255 85.528954,383.44708 84.449524,383.34548 85.310504,385.81233 85.111184,385.82372 86.058984,387.32622 86.981234,388.78826 88.234384,388.98502 89.245024,389.49756 Z" id="path3902-5" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 86.764344,392.72169 C 86.315124,390.89507 86.771254,390.33611 86.291734,389.01017 85.507474,386.84154 84.385884,386.53735 83.345484,386.23242 83.465124,387.68822 83.284494,388.61183 84.100464,390.18977 84.676684,391.30404 85.869544,392.02642 86.764344,392.72169 Z" id="path3904-2" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 81.775884,389.13555 C 81.775884,389.13555 80.874914,390.87501 81.174204,392.891 81.598214,395.74743 83.124644,396.17538 83.124644,396.17538 83.124644,396.17538 83.994034,394.8771 83.905654,392.24277 83.811274,389.4289 81.775864,389.13549 81.775864,389.13549 Z" id="path3906-4" style="fill:#ffffff;fill-opacity:1"/>
|
||||
<path d="M 78.522544,392.04526 C 78.522544,392.04526 77.620894,393.80641 77.818194,395.835 78.071034,398.4347 79.494754,399.08516 79.494754,399.08516 79.494754,399.08516 80.391584,397.6339 80.429814,395.44358 80.488134,392.09901 78.522544,392.04533 78.522544,392.04533 Z" id="path3908-0" style="fill:#ffffff;fill-opacity:1"/>
|
||||
</g>
|
||||
<path d="M 281.19046,248.71928 C 278.57254,248.71954 276.19072,251.10136 276.19046,253.71928 L 276.19046,307.71928 C 276.19072,310.3372 278.57254,312.71902 281.19046,312.71928 L 371.19046,312.71928 C 373.80838,312.71902 376.1902,310.3372 376.19046,307.71928 L 376.19046,253.71928 C 376.1902,251.10136 373.80838,248.71954 371.19046,248.71928 L 368.15921,248.71928 368.15921,276.28178 368.15921,306.84428 350.31546,307.03178 332.44046,307.21928 330.15921,308.31303 C 327.22447,309.73434 326.42542,309.88479 324.69046,309.34428 323.91265,309.10196 322.42363,308.48706 321.40921,307.96928 L 319.56546,307.03178 301.87796,307.03178 284.19046,307.03178 284.19046,276.28178 284.19046,248.71928 Z" id="rect1615-5" style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;font-family:sans-serif;"/>
|
||||
<path d="M 331.71546,307.71928 329.64046,308.85963 C 326.89528,310.35461 326.17048,310.46719 324.46546,309.73682 323.68764,309.40364 322.55356,308.81121 321.96546,308.42103 321.25579,307.95018 320.5849,307.80177 316.19046,307.74852 L 316.19046,313.04092 A 4.0004,4.6788304 0 0 0 320.19046,317.71928 L 332.19046,317.71928 A 4.0004,4.6788304 0 0 0 336.19046,313.04092 L 336.19046,307.71928 331.71546,307.71928 Z" id="rect1617-9" style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;font-family:sans-serif;"/>
|
||||
<path d="M 281.19046,242.7189 281.19046,309.93803 318.65921,309.93803 C 318.94898,310.10769 319.68225,310.56929 321.00296,311.18803 322.55309,311.91425 324.37315,312.71928 326.19046,312.71928 328.00777,312.71928 329.82783,311.91425 331.37796,311.18803 332.69867,310.56929 333.43194,310.10769 333.72171,309.93803 L 371.19046,309.93803 371.19046,242.7189 357.69046,242.7189 332.90921,242.7189 332.53421,242.9689 C 332.53421,242.9689 331.45572,243.66549 330.06546,244.3749 328.7187,245.06212 327.07304,245.65043 326.31546,245.6879 326.30983,245.68818 326.28973,245.68769 326.28421,245.6879 326.24257,245.68617 326.20085,245.68617 326.15921,245.6879 326.14859,245.68773 326.10776,245.68834 326.09671,245.6879 325.34773,245.65874 323.67222,245.06723 322.31546,244.3749 320.9252,243.66549 319.84671,242.9689 319.84671,242.9689 L 319.47171,242.7189 292.15921,242.7189 Z M 285.19046,246.7189 292.15921,246.7189 318.62796,246.7189 C 318.93259,246.91379 319.638,247.36679 320.94046,248.0314 322.06765,248.60659 322.86054,249.14307 324.19046,249.43765 L 324.19046,287.21928 C 324.17925,288.01175 325.39791,288.74064 326.19046,288.74064 326.98301,288.74064 328.20167,288.01175 328.19046,287.21928 L 328.19046,249.43765 C 329.52038,249.14307 330.31327,248.60659 331.44046,248.0314 332.74292,247.36679 333.44833,246.91379 333.75296,246.7189 L 357.69046,246.7189 367.19046,246.7189 367.19046,306.93803 332.94046,306.93803 332.59671,307.15678 C 332.59671,307.15678 331.49639,307.81354 330.09671,308.46928 328.69703,309.12502 326.92443,309.71928 326.19046,309.71928 325.45649,309.71928 323.68389,309.12502 322.28421,308.46928 320.88453,307.81354 319.78421,307.15678 319.78421,307.15678 L 319.44046,306.93803 285.19046,306.93803 Z" id="path1621-6" style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;font-family:sans-serif;"/>
|
||||
<g id="text1514-5" style="font-size:18.71344948px;font-style:normal;font-weight:normal;line-height:100%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" transform="translate(76.190462,49.841553)">
|
||||
<path d="M 228.77419,212.87756 C 224.10752,212.87756 219.33559,216.31615 219.33559,221.71966 219.33559,224.73721 221.37068,227.43896 224.84436,229.15826 228.28296,230.87756 231.37068,231.82493 231.37068,233.93019 231.37068,236.63194 228.63384,236.77229 227.19524,236.77229 223.96717,236.77229 220.10752,233.50914 220.10752,233.50914 L 216.80928,239.053 C 216.80928,239.053 220.91454,242.87756 227.68647,242.87756 233.33559,242.87756 238.59875,240.45651 238.59875,233.54422 238.59875,229.75475 235.05489,227.01791 231.82682,225.64949 228.52857,224.24598 225.79173,223.08808 225.79173,221.47405 225.79173,219.8951 226.98471,218.87756 229.23033,218.87756 232.21278,218.87756 235.08998,220.87756 235.08998,220.87756 L 237.75664,215.6144 C 237.75664,215.6144 234.03735,212.87756 228.77419,212.87756 Z" id="path3578-8" style="font-size:35.08771896px;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:League Spartan;"/>
|
||||
</g>
|
||||
<g id="text1518-4" style="font-size:19.39393997px;font-style:normal;font-weight:normal;line-height:100%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" transform="translate(76.190462,49.898023)">
|
||||
<path d="M 280.47341,212.82108 263.30978,212.82108 263.30978,242.82108 280.47341,242.82108 280.47341,236.82108 270.14614,236.82108 270.14614,230.78471 280.03705,230.78471 280.03705,224.78471 270.14614,224.78471 270.14614,218.82108 280.47341,218.82108 280.47341,212.82108 Z" id="path3581-2" style="font-size:36.36363602px;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:League Spartan;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 26 KiB |
Loading…
Add table
Add a link
Reference in a new issue