1
0
mirror of https://github.com/Damillora/Yuika synced 2024-12-04 21:53:46 +00:00

Compare commits

...

48 Commits

Author SHA1 Message Date
b5b6fafd95 Redact info and add depedency on Shian 2021-04-14 12:17:30 +07:00
05708345ec Change wording again 2021-03-17 13:51:57 +07:00
58d2b27626 Ah, just use the floating button 2021-03-17 10:55:04 +07:00
802f3b32ad Reduce right margin on nav 2021-03-17 10:49:35 +07:00
f301621aa4 More attempts for working around scrollbars 2021-03-17 10:47:19 +07:00
6b68cf29f5 Work around scrollbar overflow 2021-03-17 10:42:09 +07:00
b67f13e3ef Remoove member pages, just use Portal 2021-03-17 10:33:26 +07:00
4da070a7a8 Add tracking exclude page 2021-03-11 02:10:03 +07:00
e5237f5227 Add paid content handling 2021-03-11 00:41:31 +07:00
f10050ef7e Add membership 2021-03-11 00:19:06 +07:00
b59d91e672 Remove member pages 2021-03-10 20:52:02 +07:00
b3f4d0f583 Upgrade dependencies 2021-03-10 20:51:55 +07:00
fae3445f40 Upgrade Tailwind to 2.0 2021-01-12 19:47:42 +00:00
33ec7a91bb Abandon vertical menu for desktop 2021-01-12 19:47:42 +00:00
ca487735f1 Remove comments 2021-01-12 19:47:42 +00:00
d7926cce17 Update image sizes 2021-01-12 19:47:42 +00:00
39c910c4d2 Disable comments for post previews 2021-01-12 19:47:42 +00:00
70b6cca633 Refine comments position 2021-01-12 19:47:42 +00:00
ed728e0d47 Add Discourse comments for my blog 2021-01-12 19:47:42 +00:00
4ee7e18452 Change some terminology of pages 2021-01-12 19:47:42 +00:00
489be7f21c Add templates to prepare for full membership 2021-01-12 19:47:42 +00:00
9d9698814d Modify position of subscription a bit 2021-01-12 19:47:42 +00:00
18008fa9d7 Add blog subscription 2021-01-12 19:47:42 +00:00
3578ba80be Finalize v2 iteration of Yuika with 2.3 2021-01-12 19:47:42 +00:00
b8e02c571e Tweak tag color and author image size on mobile 2021-01-12 19:47:42 +00:00
7360bcf294 Change generic error page to one that doesn't uses theme helpers 2021-01-12 19:47:42 +00:00
cb95c1a663 Generalize error page 2021-01-12 19:47:42 +00:00
d1a77e495c Fix 404 2021-01-12 19:47:42 +00:00
4f438b295a Update design for tags and authors 2021-01-12 19:47:42 +00:00
e504c91a49 Size adjustments for sizes 2021-01-12 19:47:42 +00:00
b5597c68a0 Header design fixes 2021-01-12 19:47:42 +00:00
9e55da311f Minor consistency fixes for menu 2021-01-12 19:47:42 +00:00
86d81383f1 Yuika 2.1 2021-01-12 19:47:42 +00:00
5340cf1d9f Fix site header background 2021-01-12 19:47:42 +00:00
6ed7beabf3 Finally fix images 2021-01-12 19:47:42 +00:00
5640e80ce3 Fix post card images 2021-01-12 19:47:42 +00:00
e7ea38a451 Yuika v2.0 2021-01-12 19:47:42 +00:00
9c42ad1b30 Fix related posts grid 2021-01-12 19:47:42 +00:00
0007563875 Revert image size for post background 2021-01-12 19:47:42 +00:00
761d395df6 Add tailwind futures 2021-01-12 19:47:42 +00:00
b9645db07b Bump versions 2021-01-12 19:47:42 +00:00
979233f82f Get some optimizations going 2021-01-12 19:47:42 +00:00
Damillora
e2033638f3 Update README.md 2021-01-12 19:47:42 +00:00
0088b70e14 Adjust post spacing 2021-01-12 19:47:42 +00:00
94bf398368 Yuika v1
- Upgrade Tailwind to 1.4, integrating CSS grid and transition utilities
- Upgrade other dependencies
- Change design
2021-01-12 19:47:42 +00:00
80a1d7ef6f Theme tweaks 2021-01-12 19:47:42 +00:00
36d8fb6dcb Update posts per page 2021-01-12 19:47:42 +00:00
7076cbcb1e Create LICENSE 2021-01-12 19:47:30 +00:00
24 changed files with 1314 additions and 923 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Damillora
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,20 +1,21 @@
# Yuika, nanao.moe's blog theme
This is the theme for [blog.nanao.moe](blog.nanao.moe), which runs on Ghost.
This is the theme for [blog.nanao.moe](https://blog.nanao.moe), which runs on Ghost.
This theme is under heavy development as tweaks are made.
## Screenshots
![index-1](https://i.imgur.com/SoN1Ain.png)
![index](https://i.imgur.com/VX5GDDL.png)
![index-2](https://i.imgur.com/xi9WXXZ.png)
![post-1](https://i.imgur.com/ewJ3d8q.png)
![post-1](https://i.imgur.com/UR6BoDQ.png)
![post-2](https://i.imgur.com/5qYy5Zb.png)
![post-2](https://i.imgur.com/E7w0P6b.png)
![tag](https://i.imgur.com/r5mlo9U.png)
![tag](https://i.imgur.com/9LyJfN2.png)
![author](https://i.imgur.com/SuTXYYZ.png)
![author](https://i.imgur.com/czw5ucg.png)
## Credits

View File

@ -1,6 +1,8 @@
@import url('https://fonts.googleapis.com/css?family=Exo+2:300,400,500&display=swap');
@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
@tailwind base;
/* 1. Base Styling */
@ -8,28 +10,83 @@ html {
@apply font-sans;
}
header {
@apply py-4 px-4;
@apply py-4;
}
header a:hover {
@apply no-underline;
}
a:hover {
@apply underline;
}
/* 2. Site Header */
.index-navbar {
top: 0;
z-index: 10;
@apply transition-bg;
width: 100vw;
height: 4rem;
overflow: hidden;
@apply fixed transition-all duration-300 ease-in-out;
}
.index-navbar.enabled {
height: 100vh;
}
.index-navbar header {
background-color: transparent;
z-index: 12;
@apply transition duration-300 ease-in-out h-full;
}
.index-navbar.enabled header {
background-color: rgba(0,0,0,0.5);
}
.index-navbar.detached header {
background-color: rgba(0,0,0,0.5);
}
.index-header {
min-height: 300px;
height: 50vh;
min-height: 200px;
height: 70vh;
}
@screen md {
.index-header {
min-height: 300px;
height: 70vh;
}
}
.index-header.large {
height: 90vh;
}
.no-image {
@apply bg-yuika-blue-500
}
.site-title {
@apply flex flex-row transition duration-300 ease-in-out;
}
.site-head {
@apply flex flex-row flex-grow transition duration-300 ease-in-out;
}
.site-head a {
@apply flex flex-row py-2 items-center transition duration-300 ease-in-out h-16 inline-block px-4;
}
.site-head a:hover {
@apply bg-yuika-blue-500;
}
.site-background {
position: absolute;
opacity: 0%;
top: -23vh;
width: 100vw;
height: 100vh;
@apply transition-all duration-300 ease-in-out;
}
.index-navbar.enabled .site-background {
opacity: 100%;
top: 0;
}
.main-container {
@apply relative;
}
/* 3. Content Styling */
#post p {
@apply my-3;
@apply my-4;
}
#post h1 {
@apply my-4 text-4xl font-light;
@ -52,6 +109,9 @@ header {
#post a {
@apply text-yuika-blue-700;
}
#post a:hover {
@apply underline;
}
#post ul {
@apply list-disc;
}
@ -59,16 +119,16 @@ header {
@apply list-decimal;
}
#post code {
@apply bg-gray-200 text-yuika-blue-700;
@apply bg-gray-200 text-yuika-blue-700 whitespace-pre-wrap;
}
#post blockquote {
@apply border-l-4 border-yuika-blue-700 pl-8;
@apply border-l-4 border-yuika-blue-700 pl-8 py-2 my-8;
}
#post pre {
@apply bg-gray-200 text-yuika-blue-700 px-2 py-2 border border-yuika-blue-500;
@apply bg-gray-200 text-yuika-blue-700 px-2 py-2 px-2 border border-yuika-blue-500 my-8;
}
#post .kg-card {
@apply py-4 flex flex-col items-center object-contain my-4 mx-0;
@apply py-4 flex flex-col items-center object-contain my-8 mx-0;
}
#post .kg-card .kg-image {
@apply w-full;
@ -100,13 +160,30 @@ header {
}
#post .kg-gallery-container {
min-width: 100vw;
}
@screen md {
#post .kg-gallery-container {
min-width: 115%;
}
}
@screen lg {
#post .kg-gallery-container {
min-width: 125%;
}
}
@screen xl {
#post .kg-gallery-container {
min-width: 140%;
}
}
#post .kg-gallery-row {
@apply flex flex-row;
}
#post .kg-gallery-image {
@apply mx-1;
flex: 1 1 0%;
}
#post .kg-bookmark-card {
@ -114,19 +191,20 @@ header {
}
#post .kg-bookmark-container {
@apply flex flex-row justify-between text-black border border-gray-500 bg-white transition-bg;
@apply flex flex-row justify-between text-black border-l-4 border-yuika-blue-700 bg-white transition duration-300 ease-in-out;
}
#post .kg-bookmark-container:hover {
@apply bg-gray-400 transition-bg;
@apply bg-gray-400 transition duration-300 ease-in-out;
}
#post .kg-bookmark-content {
@apply w-2/3 py-4 px-4;
}
#post .kg-bookmark-thumbnail {
@apply w-1/3 h-full;
min-width: 33.3333%;
@apply max-h-full relative;
}
#post .kg-bookmark-thumbnail img {
@apply w-full h-full object-cover;
@apply absolute top-0 left-0 h-full w-full object-cover;
}
#post .kg-bookmark-title {
@apply font-medium text-xl no-underline mb-1;
@ -153,36 +231,44 @@ footer {
/* 4. Navbar */
.nav-group {
@apply flex flex-col h-full;
}
#menushow {
@apply cursor-pointer w-16 h-16 relative px-2 py-2 transition duration-300 ease-in-out text-center whitespace-nowrap;
}
#menushow:hover {
@apply bg-yuika-blue-500
}
.nav {
@apply hidden flex-col w-full pl-0 my-0 absolute bg-yuika-blue-700 left-0 right-0;
background: transparent;
@apply flex-col w-full pl-0 my-0;
top: 100%;
}
.nav li {
@apply flex flex-row justify-start items-center my-0 py-2 text-white text-sm px-2 h-12 px-4 transition-bg;
@apply w-full flex flex-row justify-start items-center my-0 text-white text-base h-12 transition duration-300 ease-in-out;
}
.nav li.separator {
height: 0;
@apply border border-white border-t opacity-75;
}
.nav li a {
@apply align-middle w-full table-cell;
line-height: 2rem;
@apply align-middle w-full h-full flex items-center justify-start px-4 py-2;
}
.nav li a:hover {
@apply no-underline;
}
.nav li:hover {
@apply bg-yuika-blue-700 transition-bg;
@apply bg-yuika-blue-500 transition duration-300 ease-in-out;
}
@screen md {
.nav {
@apply block static w-auto flex-row h-12 bg-transparent;
@apply pl-16;
}
.nav li {
@apply object-contain justify-center items-center border-b-0 border-t-0 my-0 inline-block h-full;
}
}
.nav-fixed {
@apply bg-yuika-blue-700;
}
.post-article {
@apply pb-32;
@apply pb-32 pt-4;
}
.content {
@ -213,22 +299,93 @@ footer {
}
/* 5. Post Card */
.post-background {
height: 18rem;
.post-card {
}
.post-card .excerpt {
max-height: 5.5rem;
.post-image-box {
@apply relative;
width: 100%;
overflow: hidden;
}
@screen md {
.post-image-box {
width: 35vw;
min-width: 300px;
max-width: 450px;
}
}
.post-image-box::after {
@apply block;
content: '';
padding-bottom: 56.25%;
}
.post-image {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.primary-tag-header {
@apply bg-blue-700 w-auto inline-block px-2 py-1 text-white text-sm transition duration-300 ease-in-out;
}
.primary-tag-header:hover {
@apply transition-all duration-300 ease-in-out underline;
}
.primary-tag-header {
@apply bg-green-700 w-auto inline-block px-2 py-1 text-white text-sm;
.tag-accent-color {
@apply inline-block rounded-full align-text-bottom h-12 w-12;
}
.tag-header {
@apply bg-blue-700 w-auto inline-block px-2 py-1 text-white text-sm;
.tag-accent-color.small {
@apply h-4 w-4;
}
.author-header {
@apply bg-red-700 w-auto inline-block px-2 py-1 text-white text-sm;
.tag-accent-color.medium {
@apply h-6 w-6;
}
.author-image {
@apply inline-block rounded-full align-text-bottom h-12 w-12;
}
@screen md {
.tag-accent-color {
@apply h-16 w-16;
}
.author-image {
@apply h-16 w-16;
}
}
.author-list {
@apply flex flex-row items-center my-2 py-2;
}
.author-images {
@apply flex flex-row;
}
.author-names {
@apply flex-grow flex flex-col;
}
.author-names a:hover {
@apply underline;
}
/* 6. Post feed */
.post-feed {
@apply grid grid-cols-1 gap-y-4 my-8;
}
/* 7. Subscribe form */
#subscribe-form .message-success {
@apply hidden;
}
#subscribe-form.success .message-success {
@apply block;
}
#subscribe-form .message-error {
@apply hidden;
}
#subscribe-form.error .message-error {
@apply block;
}
/* 8. Default transitions */
@tailwind components;
@tailwind utilities;

View File

@ -1,4 +1,12 @@
$(document).ready(function () {
$("#menushow").click(function(){
$(".index-navbar").toggleClass('enabled');
})
$(".nav li").click(function(){
$(".index-navbar").toggleClass('enabled');
})
$(document).ready(function () {
var nav = document.querySelector('.index-navbar');
var feed = document.querySelector('.content');
@ -32,9 +40,9 @@
// show/hide nav
if (lastScrollY >= nav.getBoundingClientRect().bottom) {
nav.classList.add('nav-fixed');
nav.classList.add('detached');
} else {
nav.classList.remove('nav-fixed');
nav.classList.remove('detached');
}
ticking = false;

View File

@ -1,17 +0,0 @@
$("#menushow").click(function() {
if($('.nav').css('display') == 'none') {
$(".nav").show();
} else {
$(".nav").hide();
}
});
$(window).resize(function() {
var wi = $(window).width();
if(wi >= 768) {
$(".nav").show();
} else {
$(".nav").hide();
}
});

View File

@ -1,6 +1,5 @@
{{!< default}}
{{#author}}
{{> "site-header"}}
<div class="relative group index-header">
{{> header-background background=cover_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="w-full h-full opacity-50 bg-black">
@ -8,20 +7,16 @@
</div>
<div class="absolute bottom-0 py-6 h-full left-0 right-0">
<div class="container mx-auto content-full h-full flex flex-col justify-end items-begin">
<div class="my-2">
<span class="author-header">Author</span>
<div>
<span class="text-white text-sm">Author</span>
</div>
<div class="flex flex-row">
<div class="flex flex-col items-begin mr-4">
{{#if profile_image}}
<div class="my-2">
<img class="rounded-full h-16" src="{{profile_image}}" alt="{{name}}" />
</div>
{{/if}}
</div>
<div class="flex flex-col items-begin my-2">
<div>
<h1 class="text-white text-2xl md:text-4xl">{{name}}</h1>
<div class="flex flex-row items-center mb-2">
{{#if profile_image}}
<img class="author-image" src="{{profile_image}}" alt="{{name}}" />
{{/if}}
<h1 class="text-white text-2xl md:text-4xl ml-4">{{name}}</h1>
</div>
<div class="text-white">
{{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}}
@ -49,7 +44,7 @@
</div>
{{/author}}
<div class="flex flex-wrap justify-start post-feed content w-full px-2">
<div class="post-feed content w-full px-2">
{{#foreach posts}}
{{> "post-card"}}
{{/foreach}}

View File

@ -8,38 +8,23 @@
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="{{asset "built/styles.css"}}" />
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin />
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Exo+2:300,400,500&display=swap" />
<link rel="preload" as="style" href="{{asset "built/styles.css"}}" />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Exo+2:300,400,500&display=swap" />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" type="text/css" href="{{asset "built/styles.css"}}" />
{{ghost_head}}
</head>
<body class="{{body_class}}">
<div class="w-full min-h-screen">
{{> "site-header"}}
<div class="main-container">
{{{body}}}
{{> footer}}
</div>
<footer class="md:h-16">
<div class="flex flex-col md:flex-row justify-end md:items-center h-full mb-4 md:mb-0">
<div class="text-white md:flex-grow text-sm mx py-4">
<p><a href="{{@site.url}}">{{@site.title}}</a> &copy; {{date format="YYYY"}}</p>
</div>
<div class="flex flex-col md:flex-row text-white text-sm items-end text-right">
<div class="px-4 py-4">
<a href="{{@site.url}}">Latest Posts</a>
</div>
<div class="px-4 py-4">
{{#if @site.facebook}}<a href="{{facebook_url @site.facebook}}" target="_blank" rel="noopener">Facebook</a>{{/if}}
</div>
<div class="px-4 py-4">
{{#if @site.twitter}}<a href="{{twitter_url @site.twitter}}" target="_blank" rel="noopener">Twitter</a>{{/if}}
</div>
<div class="px-4 py-4">
Powered by <a href="https://ghost.org" target="_blank" rel="noopener">Ghost</a>
</div>
<div class="px-4 py-4">
<a href="https://github.com/Damillora/Yuika">Yuika</a> Theme by <a href="https://nanao.moe" target="_blank" rel="noopener">Damillora</a>
</div>
</div>
</div>
</footer>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="

View File

@ -1,5 +1,4 @@
{{!< default}}
{{> "site-header"}}
<div class="h-screen relative">
{{> header-background background=@site.cover_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="h-full opacity-50 bg-black">

50
error.hbs Normal file
View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>{{statusCode}} - {{message}}</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin />
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Exo+2:300,400,500&display=swap" />
<link rel="preload" as="style" href="{{asset "built/styles.css"}}" />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Exo+2:300,400,500&display=swap" />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" type="text/css" href="{{asset "built/styles.css"}}" />
</head>
<body>
<div class="w-full h-full">
<div class="h-screen relative">
<div class="h-full no-image"></div>
<div class="h-full opacity-50 bg-black">
</div>
</div>
<div class="h-full flex flex-col justify-center items-begin absolute top-0 mx-12">
<h1 class="text-white text-6xl">{{statusCode}}</h1>
<p class="text-white text-xl">{{message}}</p>
<div>
{{#if errorDetails}}
<ul class="error-stack-list">
{{#foreach errorDetails}}
<li>
<em class="error-stack-function">{{{rule}}}</em>
{{#foreach failures}}
<p><span class="error-stack-file">Ref: {{ref}}</span></p>
<p><span class="error-stack-file">Message: {{message}}</span></p>
{{/foreach}}
</li>
{{/foreach}}
</ul>
{{/if}}
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -7,20 +7,6 @@ const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const cleancss = require('gulp-clean-css');
const purgecss = require('@fullhuman/postcss-purgecss')({
// Specify the paths to all of the template files in your project
content: [
'./**/*.hbs',
'./assets/**/*.js',
'./assets/css/styles.css', // This file defines required styles for the Ghost editor
// etc.
],
// Include any special characters you're using in this regular expression
defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || []
})
function serve(done) {
livereload.listen();
done();
@ -38,7 +24,6 @@ function css () {
// ...
require('tailwindcss'),
require('autoprefixer'),
...process.env.NODE_ENV === 'production' ? [purgecss] : []
// ...
]))
// ...

View File

@ -1,12 +1,29 @@
{{!< default}}
{{> "site-header"}}
<div class="relative group index-header">
{{> header-background background=@site.cover_image}} {{!--Special header-image.hbs partial to generate the background image--}}
{{> header-background background=@site.cover_image}}
<div class="w-full h-full opacity-50 bg-black">
</div>
</div>
<div class="absolute bottom-0 py-4 left-0 right-0">
<div class="container mx-auto content-full flex flex-col py-4">
{{#if @site.logo}}
<div class="w-24 h-24 py-4">
<img src="{{img_url @site.logo size="l"}}" alt="{{@site.title}}" class="w-full h-full object-contain">
</div>
{{/if}}
<div class="block flex flex-col pl-4 flex-grow">
<div class="">
<h1 class="text-2xl md:text-4xl font-light text-white">{{@site.title}}</h1>
</div>
<div class="">
<p class="text-lg md:text-xl font-light text-white">{{@site.description}}</p>
</div>
</div>
</div>
</div>
</div>
<div class="flex flex-wrap justify-start post-feed content w-full px-2">
<div class="post-feed content w-full px-2">
{{#foreach posts}}
{{> "post-card"}}
{{/foreach}}

View File

@ -1,7 +1,7 @@
{
"name": "yuika",
"description": "nanao.moe's blog theme",
"version": "0.6.0",
"version": "2.9.2",
"engines": {
"ghost-api": "v3"
},
@ -9,8 +9,12 @@
"author": {
"email": "developer@damillora.com"
},
"scripts": {
"dev": "gulp dev",
"zip": "gulp zip"
},
"config": {
"posts_per_page": 10,
"posts_per_page": 12,
"image_sizes": {
"xxs": {
"width": 30
@ -28,7 +32,10 @@
"width": 1000
},
"xl": {
"width": 2000
"width": 1600
},
"xxl": {
"width": 1920
}
}
},
@ -37,15 +44,17 @@
"yuika"
],
"dependencies": {
"@damillora/shian": "^0.1.2",
"autoprefixer": "^10.2.1",
"gulp": "^4.0.2",
"gulp-clean-css": "^4.2.0",
"gulp-concat": "^2.6.1",
"gulp-livereload": "^4.0.2",
"gulp-postcss": "^8.0.0",
"gulp-postcss": "^9.0.0",
"gulp-uglify": "^3.0.2",
"gulp-zip": "^5.0.1",
"tailwindcss": "^1.1.3",
"tailwindcss-transitions": "^2.1.0",
"postcss": "^8.2.3",
"tailwindcss": "^2.0.2",
"typeface-exo-2": "^0.0.72"
},
"devDependencies": {

View File

@ -1,7 +1,6 @@
{{!< default}}
{{#post}}
{{> "site-header"}}
<div class="relative group index-header">
{{> header-background background=feature_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="w-full h-full opacity-50 bg-black">

77
pages/exclude.hbs Normal file
View File

@ -0,0 +1,77 @@
{{!< ../default}}
<div class="relative group index-header large">
{{> header-background background=@site.cover_image}} {{!--Special header-image.hbs partial to generate the
background image--}}
<div class="w-full h-full opacity-50 bg-black">
</div>
</div>
<div class="absolute left-0 right-0 top-0 bottom-0 flex flex-row items-center justify-center">
<div class="container mx-auto content-full">
<div class="text-white">
<div id="subscribe-form">
<div>
<h1 class="text-2xl md:text-4xl">Plausible Exclude</h1>
<p>Click the button below to toggle your exclusion in analytics for this
site</p>
<p></p>You currently <span id="plausible_not">are not</span><span id="plausible_yes">are</span>
excluding your visits.</p>
<div class="py-4">
<a class="px-4 py-2 appearance-none focus:outline-none bg-yuika-blue-700 rounded-none hover:bg-yuika-blue-500 transition duration-300 ease-in-out" href="javascript:toggleExclusion()">Exclude my visits</a>
</div>
</div>
<script>
window.addEventListener('load', function (e) {
var exclusionState = window.localStorage.plausible_ignore == "true"
if (exclusionState) {
document.getElementById("plausible_not").style.display = "none"
document.getElementById("plausible_yes").style.display = "inline"
document.getElementById("plausible_button").innerHTML = 'Stop excluding my visits'
} else {
document.getElementById("plausible_yes").style.display = "none"
document.getElementById("plausible_not").style.display = "inline"
document.getElementById("plausible_button").innerHTML = 'Exclude my visits'
}
});
function toggleExclusion(e) {
var exclusionState = window.localStorage.plausible_ignore == "true"
if (exclusionState) {
delete window.localStorage.plausible_ignore
document.getElementById("plausible_yes").style.display = "none"
document.getElementById("plausible_not").style.display = "inline"
document.getElementById("plausible_button").innerHTML = 'Exclude my visits'
} else {
window.localStorage.plausible_ignore = "true"
document.getElementById("plausible_not").style.display = "none"
document.getElementById("plausible_yes").style.display = "inline"
document.getElementById("plausible_button").innerHTML = 'Stop excluding my visits'
}
}
</script>
</div>
</div>
</div>
</div>
</div>
<article class="post-article">
<main class="content container" id="post">
<div class="content-full">
{{#post}}
{{content}}
{{/post}}
</div>
</main>
{{#contentFor "scripts"}}
<script>
$(document).ready(function () {
// FitVids - start
var $postContent = $("#post");
$postContent.fitVids();
// FitVids - end
});
</script>
{{/contentFor}}

25
partials/footer.hbs Normal file
View File

@ -0,0 +1,25 @@
<footer class="md:h-16">
<div class="flex flex-col md:flex-row justify-end md:items-center h-full mb-4 md:mb-0">
<div class="text-white md:flex-grow text-sm mx py-4">
<p><a href="{{@site.url}}">{{@site.title}}</a> &copy; {{date format="YYYY"}}</p>
</div>
<div class="flex flex-col md:flex-row text-white text-sm items-end text-right">
<div class="px-4 py-4">
<a href="{{@site.url}}">Latest Posts</a>
</div>
<div class="px-4 py-4">
{{#if @site.facebook}}<a href="{{facebook_url @site.facebook}}" target="_blank" rel="noopener">Facebook</a>{{/if}}
</div>
<div class="px-4 py-4">
{{#if @site.twitter}}<a href="{{twitter_url @site.twitter}}" target="_blank" rel="noopener">Twitter</a>{{/if}}
</div>
<div class="px-4 py-4">
Powered by <a href="https://ghost.org" target="_blank" rel="noopener">Ghost</a>
</div>
<div class="px-4 py-4">
<a href="https://github.com/Damillora/Yuika">Yuika</a> Theme by <a href="https://nanao.moe" target="_blank" rel="noopener">Damillora</a>
</div>
</div>
</div>
</footer>

View File

@ -10,24 +10,12 @@ If the template in question has a background image, then we render responsive im
for it, and apply those styles to the <header> tag. Else, we just output a <header> tag
with a `no-image` class so we can style it accordingly.
--}}
{{#if feature_image}}
<style type="text/css">
.responsive-{{slug}}-img {
background-image: url({{img_url feature_image size='m'}});
}
@media(max-width: 767px) {
.responsive-{{slug}}-img {
background-image: url({{img_url feature_image size='m'}});
}
}
</style>
<div class="post-background responsive-{{slug}}-img bg-cover bg-center bg-yuika-blue-500">
{{else}}
<div class="post-background no-image">
{{/if}}
<div>
<div class="post-image-box">
{{#if feature_image}}
<img class="post-image" src="{{img_url feature_image size='m'}}">
{{else}}
<img class="post-image" src="{{img_url @site.cover_image size='m'}}">
{{/if}}
</div>
</div>

View File

@ -1,47 +1,68 @@
<div class="post-card w-full md:w-1/2 xl:w-1/3 px-3 py-6 ">
<article class="relative group w-full">
{{> post-background}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="h-full bg-black opacity-50 group-hover:opacity-75 transition-opacity">
</div>
<div class="absolute bottom-0 px-6 py-2 mt-4 mt-0 w-full">
<div class="py-1">
{{#if primary_tag}}
{{#primary_tag}}
<div class="post-card">
<article class="relative md:flex md:flex-row w-full h-full transition duration-500 ease-in-out py-4 px-4">
<a href="{{url}}">
{{> post-background}} {{!--Special header-image.hbs partial to generate the background image--}}
</a>
<div class="md:pl-4">
<div class="pt-4 md:pt-0 flex flex-row">
{{#if primary_tag}}
{{#primary_tag}}
<div class="pr-2">
<a href="{{url}}">
<span class="primary-tag-header">{{name}}</span>
</a>
{{/primary_tag}}
{{/if}}
</div>
<div class="mt-0 text-xl text-white group-hover:text-gray-300">
<a href="{{url}}"><h1 class="font-light">{{title}}</h1></a>
</div>
<div class="mt-0 text-xs text-white group-hover:text-gray-300">
<p><span class="post-card-byline-date"><time datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMM YYYY"}}</time> <span class="bull">&bull;</span> {{reading_time}}</span></p>
</div>
<div class="flex flex-row items-center my-2">
<div class="flex flex-row">
{{#foreach authors}}
{{#if profile_image}}
<div class="h-8 ml-1 mr-3">
<a href="{{url}}">
<img class="h-full rounded-full" src="{{img_url profile_image size="xs"}}" alt="{{name}}"/>
</a>
</div>
{{#if accent_color}}
<span class="tag-accent-color small" style="background-color: {{accent_color}};"></span>
{{else}}
<span class="tag-accent-color small"></span>
{{/if}}
{{/foreach}}
<span class="text-sm hover:underline">{{name}}</span>
</a>
</div>
<div class="flex-grow flex flex-col text-xs text-white">
<div>
<p>{{#has author="count:>2"}}Multiple authors{{else}}{{authors}}{{/has}}</p>
{{/primary_tag}}
{{/if}}
{{#has visibility="paid"}}
<div class="pr-2">
<a href="/subscribe">
<span class="text-sm text-red-700 hover:underline">Paid content</span>
</a>
</div>
{{/has}}
{{#has visibility="members"}}
<div class="pr-2">
<a href="/subscribe">
<span class="text-sm text-yuika-blue-700 hover:underline">Member-exclusive</span>
</a>
</div>
{{/has}}
</div>
<div class="mt-0 text-yuika-blue-700 hover:underline transition duration-500 ease-in-out">
<a href="{{url}}"><h1 class="text-xl md:text-2xl font-light">{{title}}</h1></a>
</div>
<div class="mt-0 text-xs">
<p><span class="post-card-byline-date"><time datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMM YYYY"}}</time> <span class="bull">&bull;</span> {{reading_time}}</span></p>
</div>
{{#if authors}}
<div class="author-list text-xs ">
<div class="author-images">
{{#foreach authors}}
{{#if profile_image}}
<div class="h-8 ml-1 mr-3">
<a href="{{url}}">
<img class="h-full rounded-full" src="{{img_url profile_image size="xs"}}" alt="{{name}}"/>
</a>
</div>
{{/if}}
{{/foreach}}
</div>
</div>
<div class="author-names">
<div>
<p>{{#has author="count:>2"}}Multiple authors{{else}}{{authors}}{{/has}}</p>
</div>
</div>
</div>
{{/if}}
<div class="block mt-2 mb-4 text-sm excerpt overflow-hidden">
<p>{{excerpt words="30"}}</p>
</div>
</div>
<div class="block mt-2 mb-4 text-sm text-white excerpt overflow-hidden">
<p>{{excerpt words="30"}}</p>
</div>
</div>
</div>
</article>
</article>
</div>

28
partials/primary-tag.hbs Normal file
View File

@ -0,0 +1,28 @@
{{#if primary_tag}}
{{#primary_tag}}
<div class="pr-2">
<a href="{{url}}">
{{#if accent_color}}
<span class="tag-accent-color small" style="background-color: {{accent_color}};"></span>
{{else}}
<span class="tag-accent-color small"></span>{{name}}
{{/if}}
<span class="text-base text-white hover:underline">{{name}}</span>
</a>
</div>
{{/primary_tag}}
{{/if}}
{{#has visibility="paid"}}
<div class="pr-2">
<a href="/subscribe">
<span class="text-sm text-red-200 hover:underline">Paid content</span>
</a>
</div>
{{/has}}
{{#has visibility="members"}}
<div class="pr-2">
<a href="/subscribe">
<span class="text-sm text-yuika-blue-200 hover:underline">Member-exclusive</span>
</a>
</div>
{{/has}}

View File

@ -0,0 +1,49 @@
{{!--
Wow what the hell is going on in here even?
Ok so, several templates use this big header with a giant BG image. Nice idea, but big images
have a heavy impact on performance, so it's a good idea to make them responsive. Because we
can only get the image dynamically using Handlebars, and we can only set the image to properly
be a background image using CSS, we end up with a handful of inline styles.
If the template in question has a background image, then we render responsive image styles
for it, and apply those styles to the <header> tag. Else, we just output a <header> tag
with a `no-image` class so we can style it accordingly.
--}}
{{#if @site.cover_image}}
<style type="text/css">
.responsive-site-header-img {
background-image: url({{img_url @site.cover_image size='xl'}});
}
@media(max-width: 1000px) {
.responsive-site-header-img {
background-image: url({{img_url @site.cover_image size='l'}});
background-image: -webkit-image-set(url({{img_url @site.cover_image size='l'}}) 1x,
url({{img_url @site.cover_image size='xl'}}) 2x);
background-image: image-set(url({{img_url @site.cover_image size='l'}}) 1x,
url({{img_url @site.cover_image size='xl'}}) 2x);
background-position: right 25% top 20%;
}
}
@media(max-width: 600px) {
.responsive-site-header-img {
background-image: url({{img_url @site.cover_image size='m'}});
background-image: -webkit-image-set(url({{img_url @site.cover_image size='m'}}) 1x,
url({{img_url @site.cover_image size='l'}}) 2x);
background-image: image-set(url({{img_url @site.cover_image size='m'}}) 1x,
url({{img_url @site.cover_image size='l'}}) 2x);
background-position: right 25% top 20%;
}
}
</style>
<div class="h-full w-full responsive-site-header-img bg-cover bg-yuika-blue-500">
{{else}}
<div class="h-full w-full no-image">
{{/if}}

View File

@ -1,23 +1,22 @@
<div class="w-full flex flex-row justify-begin items-center fixed index-navbar">
<header class="flex flex-row py-2 w-full relative">
{{#if @site.logo}}
<div class="w-12 h-12">
<img src="{{img_url @site.logo size="l"}}" alt="{{@site.title}}" class="w-full h-full object-contain">
<div class="index-navbar">
<div class="site-background">
{{> site-background }}
</div>
{{/if}}
<div class="flex flex-col pl-4 flex-grow">
<div class="">
<a href="{{@site.url}}">
<h1 class="text-lg text-white">{{@site.title}}</h1>
</a>
</div>
<header class="flex flex-col w-full relative py-0">
<div class="site-title">
<div id="menushow" class="py-2">
<span class="h-12 w-12 px-2 py-3 text-white material-icons" alt="menu">menu</span>
</div>
<div class="">
<p class="text-sm text-white">{{@site.description}}</p>
<div class="site-head">
<a href="{{@site.url}}" class="block flex flex-col flex-grow site-title">
<h1 class="text-lg text-white">{{@site.title}}</h1>
</a>
</div>
</div>
<div id="menushow" class="cursor-pointer relative">
<img src="{{asset "images/menu.svg"}}" class="h-12 w-12 px-3 py-3 text-white md:hidden" style="filter: invert(1);" alt="menu"/>
<div class="nav-group">
{{navigation}}
</div>
{{navigation}}
</header>
</div>
</div>

226
post.hbs
View File

@ -1,110 +1,148 @@
{{!< default}}
{{#post}}
{{> "site-header"}}
<div class="relative group index-header">
{{> header-background background=feature_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="h-full opacity-50 bg-black">
</div>
{{!< default}} {{#post}} <div class="relative group index-header">
{{> header-background background=feature_image}} {{!--Special header-image.hbs partial to generate the background
image--}}
<div class="h-full opacity-50 bg-black">
</div>
<div class="absolute bottom-0 py-6 left-0 right-0">
<div class="container mx-auto content-full">
{{#if primary_tag}}
{{#primary_tag}}
<div>
<a href="{{url}}"><span class="primary-tag-header">{{name}}</span></a>
</div>
{{/primary_tag}}
{{/if}}
<div>
<h1 class="text-white font-light text-3xl md:text-4xl">{{title}}</h1>
</div>
<div class="mb-4">
<p><span class="text-white text-sm"><time datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMM YYYY"}}</time> <span class="bull">&bull;</span> {{reading_time}}</span></p>
</div>
<div class="flex flex-row">
{{#foreach authors}}
</div>
<div class="absolute bottom-0 py-4 left-0 right-0">
<div class="container mx-auto content-full">
<div class="flex">
{{> primary-tag}}
</div>
<div>
<h1 class="text-white font-light text-3xl md:text-4xl">{{title}}</h1>
</div>
<div class="mb-4">
<p><span class="text-white text-sm"><time datetime="{{date format=" YYYY-MM-DD"}}">{{date format="D MMM
YYYY"}}</time> <span class="bull">&bull;</span> {{reading_time}}</span></p>
</div>
<div class="author-list text-base text-white">
<div class="author-images">
{{#foreach authors}}
{{#if profile_image}}
<div class="h-8 ml-1 mr-3">
<a href="{{url}}">
<img class="h-full rounded-full" src="{{img_url profile_image size="xs"}}" alt="{{name}}"/>
</a>
</div>
{{else}}
<a href="{{url}}" class="static-avatar author-profile-image">{{> "icons/avatar"}}</a>
{{/if}}
{{/foreach}}
<div class="text-white">
<p>{{#has author="count:>2"}}Multiple authors{{else}}{{authors}}{{/has}}</p>
<div class="h-8 ml-1 mr-3">
<a href="{{url}}">
<img class="h-full rounded-full" src="{{img_url profile_image size=" xs"}}" alt="{{name}}" />
</a>
</div>
{{/if}}
{{/foreach}}
</div>
<div class="author-names">
<div>
<p>{{#has author="count:>2"}}Multiple authors{{else}}{{authors}}{{/has}}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<article class="post-article">
<main class="content container" id="post">
<div class="content-full">
{{content}}
</div>
<div class="content-full">
<div class="my-4" id="comments">
</div>
</div>
</main>
<div class="my-4 w-full content-full">
<div class="flex flex-row justify-between">
{{#prev_post}}
<div class="w-1/3">
<a href="{{url}}">
<div class="flex flex-col items-end">
<p class="text-xl text-blue-700">Previous post</p>
<article class="post-article">
<main class="content container" id="post">
<div class="content-full">
{{#if access}}
{{content}}
{{else}}
<div class="w-full py-8 text-center bg-yuika-blue-700 text-white md:px-8">
<h1>Access level insufficient</h1>
{{#has visibility="paid"}}
<h2>Access level: Autonomous System</h2>
<p>By subscribing as an Autonomous System, you can unlock access to the contents of this post, get additional benefits and support me at the same time!</p>
<div class="flex justify-center">
<a class="px-4 py-2 bg-white border-yuika-blue-500 border appearance-none focus:outline-none border-yuika-blue-700 rounded-none hover:bg-yuika-blue-500 transition duration-300 ease-in-out"
href="/subscribe">
Become a member now
</a>
</div>
{{/has}}
{{#has visibility="members"}}
<h2>Access level: Subscriber</h2>
<p>Subscribing gives you access to the contents of this post, and get notified on subsequent posts!</p>
<div class="flex justify-center">
<a class="px-4 py-2 bg-white border-yuika-blue-500 border appearance-none focus:outline-none border-yuika-blue-700 rounded-none hover:bg-yuika-blue-500 transition duration-300 ease-in-out"
href="/subscribe">
Subscribe now
</a>
</div>
{{/has}}
</div>
{{/if}}
</div>
</main>
<div class="my-4 w-full content-full">
<div class="flex flex-col md:flex-row justify-between">
{{#prev_post}}
<a href="{{url}}"
class="block w-full md:w-1/3 flex flex-row items-center justify-start md:justify-end hover:text-white hover:bg-yuika-blue-700 transition duration-500 ease-in-out group py-4 px-4 hover:no-underline">
<span class="material-icons mr-4 text-yuika-blue-700 text-2xl group-hover:text-white">arrow_back</span>
<div class="flex flex-col items-start md:items-end ">
<p class="text-xl text-yuika-blue-700 group-hover:text-white">Previous post</p>
<p>{{title}}</p>
</div>
</a>
</div>
{{/prev_post}}
<div class="flex flex-grow"></div>
{{#next_post}}
<div class="w-1/3">
<a href="{{url}}">
<div class="flex flex-col items-begin">
<p class="text-xl text-blue-700">Next post</p>
{{/prev_post}}
<div class="flex flex-grow"></div>
{{#next_post}}
<a href="{{url}}"
class="block w-full md:w-1/3 flex flex-row items-center justify-end md:justify-start hover:text-white hover:bg-yuika-blue-700 transition duration-500 ease-in-out group py-4 px-4 hover:no-underline">
<div class="flex flex-col items-end md:items-start">
<p class="text-xl text-yuika-blue-700 group-hover:text-white">Next post</p>
<p>{{title}}</p>
</div>
<span class="material-icons ml-4 text-yuika-blue-700 text-2xl group-hover:text-white">arrow_forward</span>
</a>
{{/next_post}}
</div>
{{/next_post}}
</div>
</div>
<div class="mx-auto px-4 my-4 w-full">
{{#if primary_tag}}
{{#get "posts" filter="tags:{{primary_tag.slug}}+id:-{{id}}" limit="3" as |related_posts|}}
{{#if related_posts}}
{{#../primary_tag}}
<div class="px-3 w-full">
<p class="text-2xl">More in <a href="{{url}}" class="bg-green-700 w-auto inline px-2 py-1 text-white text-2xl">{{name}}</a> </p>
</div>
{{/../primary_tag}}
<div class="flex flex-wrap justify-start w-full">
{{#foreach related_posts}}
{{> post-card}}
{{/foreach}}
</div>
{{/if}}
{{/get}}
<div class="my-4 w-full content-full">
<div class="my-4" id="comments">
{{#is "preview"}}
<p>Comments are disabled for post previews</p>
{{else}}
{{!-- Comments --}}
{{/is}}
</div>
</div>
<div class="mx-auto px-4 my-4 w-full">
{{#if primary_tag}}
{{#get "posts" filter="tags:{{primary_tag.slug}}+id:-{{id}}" limit="3" as |related_posts|}}
{{#if related_posts}}
{{#../primary_tag}}
<div class="px-3 w-full">
<p class="text-2xl">
More in
<a href="{{url}}">
{{#if accent_color}}
<span class="tag-accent-color medium" style="background-color: {{accent_color}};"></span>
{{else}}
<span class="tag-accent-color medium"></span>{{name}}
{{/if}}
</div>
{{/post}}
</article>
<span class="hover:underline">{{name}}</span>
</a>
</p>
</div>
{{/../primary_tag}}
<div class="grid grid-rows-3 grid-cols-1 row-gap-4 my-4">
{{#foreach related_posts}}
{{> post-card}}
{{/foreach}}
</div>
{{/if}}
{{/get}}
{{/if}}
</div>
{{/post}}
</article>
{{#contentFor "scripts"}}
<script>
$(document).ready(function () {
// FitVids - start
var $postContent = $("#post");
$postContent.fitVids();
// FitVids - end
});
</script>
{{/contentFor}}
{{#contentFor "scripts"}}
<script>
$(document).ready(function () {
// FitVids - start
var $postContent = $("#post");
$postContent.fitVids();
// FitVids - end
});
</script>
{{/contentFor}}

27
tag.hbs
View File

@ -1,7 +1,6 @@
{{!< default}}
{{#tag}}
{{> "site-header"}}
<div class="relative group index-header">
{{> header-background background=feature_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="w-full h-full opacity-50 bg-black">
@ -9,25 +8,33 @@
</div>
<div class="absolute bottom-0 py-6 h-full left-0 right-0">
<div class="container mx-auto content-full h-full flex flex-col justify-end items-begin">
<div class="my-2">
<span class="tag-header">Tag</span>
</div>
<div>
<h1 class="text-white text-2xl md:text-4xl">{{name}}</h1>
<span class="text-white text-sm">Tag</span>
</div>
<div class="text-white">
{{#if description}}
<p>{{description}}</p>
<div class="flex flex-row items-center py-2">
{{#if accent_color}}
<span class="tag-accent-color" style="background-color: {{accent_color}};"></span>
{{else}}
<p>A collection of {{plural ../pagination.total empty='posts' singular='% post' plural='% posts'}}</p>
<span class="tag-accent-color bg-blue-700"></span>
{{/if}}
<h1 class="text-white text-2xl md:text-4xl ml-4">
{{name}}
</h1>
</div>
<div class="text-white text-sm">
{{plural ../pagination.total empty='posts' singular='% post' plural='% posts'}}
</div>
{{#if description}}
<div class="text-white pt-4">
<p>{{description}}</p>
</div>
{{/if}}
</div>
</div>
</div>
{{/tag}}
<div class="flex flex-wrap justify-start post-feed content w-full px-2">
<div class="post-feed content w-full px-2">
{{#foreach posts}}
{{> "post-card"}}
{{/foreach}}

View File

@ -1,15 +1,11 @@
module.exports = {
purge: [
'./**/*.hbs',
'./assets/**/*.js',
'./assets/css/styles.css', // This file defines required styles for the Ghost editor
// etc.
],
theme: {
transitionProperty: {
'none': 'none',
'all': 'all',
'color': 'color',
'bg': 'background-color',
'border': 'border-color',
'colors': ['color', 'background-color', 'border-color'],
'opacity': 'opacity',
'transform': 'transform',
},
extend: {
colors: {
'yuika-blue': {
@ -36,8 +32,10 @@ module.exports = {
'body': ['"Exo 2"',' -apple-system', 'BlinkMacSystemFont', '"Segoe UI"', 'Roboto', '"Helvetica Neue"', 'Arial', '"Noto Sans"', 'sans-serif', '"Apple Color Emoji"', '"Segoe UI Emoji"', '"Segoe UI Symbol"', '"Noto Color Emoji"'],
}
},
variants: ['responsive', 'group-hover', 'hover', 'active' ],
variants: ['responsive', 'group-hover', 'hover', 'active','focus' ],
plugins: [
require('tailwindcss-transitions')(),
],
future: {
purgeLayersByDefault: true
},
}

1146
yarn.lock

File diff suppressed because it is too large Load Diff