first commit
35
partials/components/contact-page.hbs
Normal file
@@ -0,0 +1,35 @@
|
||||
<link rel="stylesheet" href="{{asset "css/contact.css"}}">
|
||||
|
||||
{{#is "page" url="/contact/"}}
|
||||
|
||||
<div class="contact-form">
|
||||
<form action="mailto:anydev.anyway@gmail.com" method="post" enctype="text/plain" id="contactForm">
|
||||
<div class="form-row">
|
||||
<div class="form-field">
|
||||
<label for="name">Name:</label>
|
||||
<input type="text" id="name" name="name" placeholder="Your name" required>
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="email">Email:</label>
|
||||
<input type="email" id="email" name="email" placeholder="Your email" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="message">Message:</label>
|
||||
<textarea id="message" name="message" placeholder="Your message" required></textarea>
|
||||
</div>
|
||||
<button type="submit" class="submit-button" id="submitBtn" disabled>Send Message</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const form = document.getElementById('contactForm');
|
||||
const submitBtn = document.getElementById('submitBtn');
|
||||
|
||||
form.addEventListener('input', () => {
|
||||
const isFormFilled = form.name.value && form.email.value && form.message.value;
|
||||
submitBtn.disabled = !isFormFilled;
|
||||
});
|
||||
</script>
|
||||
|
||||
{{/is}}
|
25
partials/components/cta.hbs
Normal file
@@ -0,0 +1,25 @@
|
||||
{{#if @site.members_enabled}}
|
||||
{{#unless @member}}
|
||||
{{#match @custom.header_style "!=" "Landing"}}
|
||||
{{#match @custom.header_style "!=" "Search"}}
|
||||
{{#match @custom.header_style "!=" "Off"}}
|
||||
{{#match posts.length ">=" 7}}
|
||||
<section class="gh-cta gh-outer">
|
||||
<div class="gh-cta-inner gh-inner">
|
||||
<div class="gh-cta-content">
|
||||
<h2 class="gh-cta-title is-title">
|
||||
{{#if @custom.signup_heading}}{{@custom.signup_heading}}{{else}}{{@site.title}}{{/if}}
|
||||
</h2>
|
||||
<p class="gh-cta-description is-body">
|
||||
{{#if @custom.signup_subheading}}{{@custom.signup_subheading}}{{else}}{{@site.description}}{{/if}}
|
||||
</p>
|
||||
</div>
|
||||
{{> "email-subscription" email_field_id="cta-email"}}
|
||||
</div>
|
||||
</section>
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
14
partials/components/featured.hbs
Normal file
@@ -0,0 +1,14 @@
|
||||
{{#if showFeatured}}
|
||||
{{#get "posts" filter="featured:true" include="authors" limit=limit as |featured|}}
|
||||
<section class="gh-featured gh-outer">
|
||||
<div class="gh-featured-inner gh-inner">
|
||||
<h2 class="gh-featured-title">Featured</h2>
|
||||
<div class="gh-featured-feed">
|
||||
{{#foreach featured}}
|
||||
{{> "post-card" imageSizes="80px"}}
|
||||
{{/foreach}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{/get}}
|
||||
{{/if}}
|
35
partials/components/footer.hbs
Normal file
@@ -0,0 +1,35 @@
|
||||
<footer class="gh-footer{{#match @custom.header_and_footer_color "Accent color"}} has-accent-color{{/match}} gh-outer">
|
||||
<div class="gh-footer-inner gh-inner">
|
||||
|
||||
<div class="gh-footer-bar">
|
||||
<span class="gh-footer-logo is-title">
|
||||
{{#if @site.logo}}
|
||||
<img src="{{@site.logo}}" alt="{{@site.title}}">
|
||||
{{else}}
|
||||
{{@site.title}}
|
||||
{{/if}}
|
||||
</span>
|
||||
<nav class="gh-footer-menu">
|
||||
{{navigation type="secondary"}}
|
||||
</nav>
|
||||
<div class="gh-footer-copyright">
|
||||
Powered by <a href="https://ghost.org/" target="_blank" rel="noopener">Ghost</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if @site.members_enabled}}
|
||||
{{#unless @member}}
|
||||
<section class="gh-footer-signup">
|
||||
<h2 class="gh-footer-signup-header is-title">
|
||||
{{#if @custom.signup_heading}}{{@custom.signup_heading}}{{else}}{{@site.title}}{{/if}}
|
||||
</h2>
|
||||
<p class="gh-footer-signup-subhead is-body">
|
||||
{{#if @custom.signup_subheading}}{{@custom.signup_subheading}}{{else}}{{@site.description}}{{/if}}
|
||||
</p>
|
||||
{{> "email-subscription" email_field_id="footer-email"}}
|
||||
</section>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</footer>
|
81
partials/components/header-content.hbs
Normal file
@@ -0,0 +1,81 @@
|
||||
<section class="gh-header is-{{#match headerStyle "Magazine"}}magazine{{else match headerStyle "Highlight"}}highlight{{else}}classic{{/match}}{{#if @custom.background_image}}{{#if @site.cover_image}} has-image{{/if}}{{/if}} gh-outer">
|
||||
|
||||
{{!-- Background image --}}
|
||||
{{#if @custom.background_image}}
|
||||
{{#match headerStyle "!=" "Magazine"}}
|
||||
{{#match headerStyle "!=" "Highlight"}}
|
||||
{{#if @site.cover_image}}
|
||||
<img class="gh-header-image" src="{{@site.cover_image}}" alt="{{@site.title}}">
|
||||
{{/if}}
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
{{/if}}
|
||||
|
||||
<div class="gh-header-inner gh-inner">
|
||||
|
||||
{{!-- Highlight layout --}}
|
||||
{{#match headerStyle "Highlight"}}
|
||||
<div class="gh-header-left">
|
||||
{{#foreach posts limit="1"}}
|
||||
{{> "post-card" imageSizes="(max-width: 767px) calc(100vw - max(8vmin, 40px)), 640px"}}
|
||||
{{/foreach}}
|
||||
</div>
|
||||
<div class="gh-header-middle">
|
||||
{{#foreach posts from="2" limit="3"}}
|
||||
{{> "post-card"}}
|
||||
{{/foreach}}
|
||||
</div>
|
||||
<div class="gh-header-right">
|
||||
{{#if @custom.show_featured_posts}}
|
||||
{{> "components/featured" showFeatured=@custom.show_featured_posts limit=6}}
|
||||
{{else}}
|
||||
<div class="gh-featured-feed">
|
||||
{{#foreach posts from="5" limit="6"}}
|
||||
{{> "post-card" imageSizes="80px"}}
|
||||
{{/foreach}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/match}}
|
||||
|
||||
{{!-- Magazine layout --}}
|
||||
{{#match headerStyle "Magazine"}}
|
||||
{{#foreach posts limit="7"}}
|
||||
{{#match @number 2}}
|
||||
<div class="gh-header-left">
|
||||
{{/match}}
|
||||
{{#match @number 5}}
|
||||
<div class="gh-header-right">
|
||||
{{/match}}
|
||||
{{#if @first}}
|
||||
{{> "post-card" imageSizes="640px"}}
|
||||
{{else}}
|
||||
{{> "post-card"}}
|
||||
{{/if}}
|
||||
{{#match @number 4}}
|
||||
</div>
|
||||
{{/match}}
|
||||
{{#match @number 7}}
|
||||
</div>
|
||||
{{/match}}
|
||||
{{/foreach}}
|
||||
{{/match}}
|
||||
|
||||
{{!-- Landing layout --}}
|
||||
{{#match headerStyle "Landing"}}
|
||||
<h1 class="gh-header-title is-title">{{#if @custom.header_text}}{{@custom.header_text}}{{else}}{{@site.description}}{{/if}}</h1>
|
||||
{{> "email-subscription" email_field_id="header-email"}}
|
||||
{{/match}}
|
||||
|
||||
{{!-- Search layout --}}
|
||||
{{#match headerStyle "Search"}}
|
||||
<h1 class="gh-header-title is-title">{{#if @custom.header_text}}{{@custom.header_text}}{{else}}{{@site.description}}{{/if}}</h1>
|
||||
<form class="gh-form">
|
||||
{{> "icons/search"}}
|
||||
<button class="gh-form-input" data-ghost-search>Search posts, tags and authors</button>
|
||||
</form>
|
||||
{{/match}}
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
19
partials/components/header.hbs
Normal file
@@ -0,0 +1,19 @@
|
||||
{{#match headerStyle "!=" "Off"}}
|
||||
|
||||
{{#match headerStyle "Highlight"}}
|
||||
{{> "components/header-content"}}
|
||||
{{else match headerStyle "Magazine"}}
|
||||
{{> "components/header-content"}}
|
||||
{{else}}
|
||||
{{#match headerStyle "Landing"}}
|
||||
{{#if @site.members_enabled}}
|
||||
{{#unless @member}}
|
||||
{{> "components/header-content"}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{> "components/header-content"}}
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
|
||||
{{/match}}
|
26
partials/components/hero.hbs
Normal file
@@ -0,0 +1,26 @@
|
||||
<link rel="stylesheet" href="{{asset "css/hero.css"}}">
|
||||
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-inner">
|
||||
<!-- Left content with logo and text -->
|
||||
<div class="hero-content">
|
||||
<img src="assets/images/anyway_logo_black.png" alt="Logo" class="hero-logo">
|
||||
<h1 class="hero-title">Our new app is available for download</h1>
|
||||
<a href="https://anydev.info/download/" class="hero-button">Start now</a>
|
||||
</div>
|
||||
|
||||
<!-- Right content with app screenshots -->
|
||||
<div class="hero-screenshots">
|
||||
<div class="screenshot">
|
||||
<img src="assets/screenshots/home_1.jpg" alt="Screenshot 1">
|
||||
</div>
|
||||
<div class="screenshot">
|
||||
<img src="assets/screenshots/home_2.jpg" alt="Screenshot 2">
|
||||
</div>
|
||||
<div class="screenshot">
|
||||
<img src="assets/screenshots/home_3.jpg" alt="Screenshot 3">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
53
partials/components/navigation.hbs
Normal file
@@ -0,0 +1,53 @@
|
||||
<header id="gh-navigation" class="gh-navigation is-{{#match navigationLayout "Logo on the left"}}left-logo{{else match navigationLayout "Stacked"}}stacked{{else}}middle-logo{{/match}}{{#match @custom.header_and_footer_color "Accent color"}} has-accent-color{{/match}} gh-outer">
|
||||
<div class="gh-navigation-inner gh-inner">
|
||||
|
||||
<div class="gh-navigation-brand">
|
||||
<a class="gh-navigation-logo is-title" href="{{@site.url}}">
|
||||
{{#if @site.logo}}
|
||||
<img src="{{@site.logo}}" alt="{{@site.title}}">
|
||||
{{else}}
|
||||
{{@site.title}}
|
||||
{{/if}}
|
||||
</a>
|
||||
{{> "search-toggle"}}
|
||||
<button class="gh-burger gh-icon-button" aria-label="Menu">
|
||||
{{> "icons/burger"}}
|
||||
{{> "icons/close"}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<nav class="gh-navigation-menu">
|
||||
{{navigation}}
|
||||
{{#unless @site.members_enabled}}
|
||||
{{#match navigationLayout "Stacked"}}
|
||||
{{> "search-toggle"}}
|
||||
{{/match}}
|
||||
{{/unless}}
|
||||
</nav>
|
||||
|
||||
<div class="gh-navigation-actions">
|
||||
{{#unless @site.members_enabled}}
|
||||
{{^match navigationLayout "Stacked"}}
|
||||
{{> "search-toggle"}}
|
||||
{{/match}}
|
||||
{{else}}
|
||||
{{> "search-toggle"}}
|
||||
<div class="gh-navigation-members">
|
||||
{{#unless @member}}
|
||||
{{#unless @site.members_invite_only}}
|
||||
<a href="#/portal/signin" data-portal="signin">Sign in</a>
|
||||
{{#unless hideSubscribeButton}}
|
||||
<a class="gh-button" href="#/portal/signup" data-portal="signup">Subscribe</a>
|
||||
{{/unless}}
|
||||
{{else}}
|
||||
<a class="gh-button" href="#/portal/signin" data-portal="signin">Sign in</a>
|
||||
{{/unless}}
|
||||
{{else}}
|
||||
<a class="gh-button" href="#/portal/account" data-portal="account">Account</a>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</header>
|
123
partials/components/post-list.hbs
Normal file
@@ -0,0 +1,123 @@
|
||||
{{!--
|
||||
Parameters:
|
||||
* feed (index, home, archive, recent)
|
||||
* postFeedStyle (list, grid)
|
||||
* showTitle (true, false)
|
||||
* showSidebar (true, false)
|
||||
--}}
|
||||
|
||||
<section class="gh-container is-{{#match postFeedStyle "List"}}list{{else}}grid{{/match}}{{#if showSidebar}} has-sidebar{{/if}}{{#unless @custom.show_images_in_feed}} no-image{{/unless}} gh-outer">
|
||||
<div class="gh-container-inner gh-inner">
|
||||
|
||||
{{#if showTitle}}
|
||||
<h2 class="gh-container-title">
|
||||
{{#unless title}}Latest{{else}}{{title}}{{/unless}}
|
||||
</h2>
|
||||
{{/if}}
|
||||
|
||||
<main class="gh-main">
|
||||
<div class="gh-feed">
|
||||
|
||||
{{!-- Homepage --}}
|
||||
{{#match feed "home"}}
|
||||
{{#match @custom.header_style "Highlight"}}
|
||||
{{#if @custom.show_featured_posts}}
|
||||
{{#match posts.length ">=" 4}}
|
||||
{{#get "posts" include="authors" limit="16"}}
|
||||
{{#foreach posts from="5"}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/get}}
|
||||
{{/match}}
|
||||
{{else}}
|
||||
{{#match posts.length ">=" 10}}
|
||||
{{#get "posts" include="authors" limit="22"}}
|
||||
{{#foreach posts from="11"}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/get}}
|
||||
{{/match}}
|
||||
{{/if}}
|
||||
{{else match @custom.header_style "Magazine"}}
|
||||
{{#match posts.length ">=" 7}}
|
||||
{{#get "posts" include="authors" limit="19"}}
|
||||
{{#foreach posts from="8"}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/get}}
|
||||
{{/match}}
|
||||
{{else}}
|
||||
{{#get "posts" include="authors" limit="12"}}
|
||||
{{#foreach posts}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/get}}
|
||||
{{/match}}
|
||||
{{/match}}
|
||||
|
||||
{{!-- All posts --}}
|
||||
{{#match feed "index"}}
|
||||
{{#match pagination.page 2}}
|
||||
{{#get "posts" include="authors" limit=@config.posts_per_page as |recent|}}
|
||||
{{#foreach recent}}
|
||||
{{> "post-card"}}
|
||||
{{/foreach}}
|
||||
{{/get}}
|
||||
{{/match}}
|
||||
{{#foreach posts}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/match}}
|
||||
|
||||
{{!-- Tag and author pages --}}
|
||||
{{#match feed "archive"}}
|
||||
{{#foreach posts}}
|
||||
{{> "post-card" lazyLoad=true}}
|
||||
{{/foreach}}
|
||||
{{/match}}
|
||||
|
||||
</div>
|
||||
|
||||
{{#match pagination.pages ">" 1}}
|
||||
<div class="gh-more is-title">
|
||||
<a href="{{@site.url}}/page/2">See all {{> "icons/arrow"}}</a>
|
||||
</div>
|
||||
{{/match}}
|
||||
</main>
|
||||
|
||||
{{#if showSidebar}}
|
||||
<aside class="gh-sidebar">
|
||||
<div class="gh-sidebar-inner">
|
||||
<section class="gh-about">
|
||||
{{#if @site.icon}}
|
||||
<img class="gh-about-icon" src="{{@site.icon}}" alt="{{@site.title}}" loading="lazy">
|
||||
{{/if}}
|
||||
<h3 class="gh-about-title is-title">{{@site.title}}</h3>
|
||||
{{#if @site.description}}
|
||||
<p class="gh-about-description is-body">{{@site.description}}</p>
|
||||
{{/if}}
|
||||
{{#if @site.members_enabled}}
|
||||
{{#unless @member}}
|
||||
<button class="gh-button" data-portal="signup">Subscribe</button>
|
||||
{{else}}
|
||||
{{#if @site.paid_members_enabled}}
|
||||
{{#unless @member.paid}}
|
||||
<button class="gh-button" data-portal="upgrade">Upgrade</button>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
</section>
|
||||
{{#if @site.recommendations_enabled}}
|
||||
<section class="gh-recommendations">
|
||||
<h4 class="gh-sidebar-title">Recommendations</h4>
|
||||
{{recommendations}}
|
||||
<button data-portal="recommendations">See all {{> "icons/arrow"}}</button>
|
||||
</section>
|
||||
{{/if}}
|
||||
</div>
|
||||
</aside>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</section>
|
9
partials/email-subscription.hbs
Normal file
@@ -0,0 +1,9 @@
|
||||
<form class="gh-form" data-members-form>
|
||||
<input class="gh-form-input" id="{{email_field_id}}" name="email" type="email" placeholder="jamie@example.com" required data-members-email>
|
||||
<button class="gh-button" type="submit" aria-label="Subscribe">
|
||||
<span><span>Subscribe</span> {{> "icons/arrow"}}</span>
|
||||
{{> "icons/loader"}}
|
||||
{{> "icons/checkmark"}}
|
||||
</button>
|
||||
<p data-members-error></p>
|
||||
</form>
|
17
partials/feature-image.hbs
Normal file
@@ -0,0 +1,17 @@
|
||||
{{#if feature_image}}
|
||||
<figure class="gh-article-image">
|
||||
<img
|
||||
srcset="{{img_url feature_image size="s"}} 320w,
|
||||
{{img_url feature_image size="m"}} 600w,
|
||||
{{img_url feature_image size="l"}} 960w,
|
||||
{{img_url feature_image size="xl"}} 1200w,
|
||||
{{img_url feature_image size="xxl"}} 2000w"
|
||||
sizes="(max-width: 1200px) 100vw, 1120px"
|
||||
src="{{img_url feature_image size="xl"}}"
|
||||
alt="{{title}}"
|
||||
>
|
||||
{{#if feature_image_caption}}
|
||||
<figcaption>{{feature_image_caption}}</figcaption>
|
||||
{{/if}}
|
||||
</figure>
|
||||
{{/if}}
|
1
partials/icons/arrow.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><path d="M224.49,136.49l-72,72a12,12,0,0,1-17-17L187,140H40a12,12,0,0,1,0-24H187L135.51,64.48a12,12,0,0,1,17-17l72,72A12,12,0,0,1,224.49,136.49Z"></path></svg>
|
After Width: | Height: | Size: 264 B |
1
partials/icons/avatar.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M3.513 18.998C4.749 15.504 8.082 13 12 13s7.251 2.504 8.487 5.998C18.47 21.442 15.417 23 12 23s-6.47-1.558-8.487-4.002zM12 12c2.21 0 4-2.79 4-5s-1.79-4-4-4-4 1.79-4 4 1.79 5 4 5z" fill="#FFF"/></g></svg>
|
After Width: | Height: | Size: 308 B |
1
partials/icons/burger.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 256 256"><path d="M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z"></path></svg>
|
After Width: | Height: | Size: 282 B |
24
partials/icons/checkmark.hbs
Normal file
@@ -0,0 +1,24 @@
|
||||
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
|
||||
<path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
|
||||
<style>
|
||||
.checkmark {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: block;
|
||||
stroke-width: 2.5;
|
||||
stroke: currentColor;
|
||||
stroke-miterlimit: 10;
|
||||
}
|
||||
|
||||
.checkmark__check {
|
||||
transform-origin: 50% 50%;
|
||||
stroke-dasharray: 48;
|
||||
stroke-dashoffset: 48;
|
||||
animation: stroke .3s cubic-bezier(0.650, 0.000, 0.450, 1.000) forwards;
|
||||
}
|
||||
|
||||
@keyframes stroke {
|
||||
100% { stroke-dashoffset: 0; }
|
||||
}
|
||||
</style>
|
||||
</svg>
|
After Width: | Height: | Size: 716 B |
1
partials/icons/close.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 256 256"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path></svg>
|
After Width: | Height: | Size: 313 B |
1
partials/icons/facebook.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M23.9981 11.9991C23.9981 5.37216 18.626 0 11.9991 0C5.37216 0 0 5.37216 0 11.9991C0 17.9882 4.38789 22.9522 10.1242 23.8524V15.4676H7.07758V11.9991H10.1242V9.35553C10.1242 6.34826 11.9156 4.68714 14.6564 4.68714C15.9692 4.68714 17.3424 4.92149 17.3424 4.92149V7.87439H15.8294C14.3388 7.87439 13.8739 8.79933 13.8739 9.74824V11.9991H17.2018L16.6698 15.4676H13.8739V23.8524C19.6103 22.9522 23.9981 17.9882 23.9981 11.9991Z"/></svg>
|
After Width: | Height: | Size: 531 B |
3
partials/icons/fire.hbs
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 538 B |
17
partials/icons/loader.hbs
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24">
|
||||
<g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
|
||||
<g class="nc-loop-dots-4-24-icon-o">
|
||||
<circle cx="4" cy="12" r="3"></circle>
|
||||
<circle cx="12" cy="12" r="3"></circle>
|
||||
<circle cx="20" cy="12" r="3"></circle>
|
||||
</g>
|
||||
<style data-cap="butt">
|
||||
.nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
|
||||
.nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
|
||||
.nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
|
||||
.nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
|
||||
.nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
|
||||
@keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
|
||||
</style>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
partials/icons/lock.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" height="20" width="20" id="Lock-1--Streamline-Ultimate"><defs></defs><title>lock-1</title><path d="M4.375 8.125h11.25s1.25 0 1.25 1.25v8.75s0 1.25 -1.25 1.25H4.375s-1.25 0 -1.25 -1.25v-8.75s0 -1.25 1.25 -1.25" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="M5.625 8.125V5a4.375 4.375 0 0 1 8.75 0v3.125" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path><path d="m10 12.5 0 2.5" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></svg>
|
After Width: | Height: | Size: 678 B |
1
partials/icons/rss.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="6.18" cy="17.82" r="2.18"/><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"/></svg>
|
After Width: | Height: | Size: 263 B |
1
partials/icons/search.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>
|
After Width: | Height: | Size: 248 B |
1
partials/icons/twitter.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 24 24" fill="currentColor"><g><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></g></svg>
|
After Width: | Height: | Size: 231 B |
41
partials/lightbox.hbs
Normal file
@@ -0,0 +1,41 @@
|
||||
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="pswp__bg"></div>
|
||||
|
||||
<div class="pswp__scroll-wrap">
|
||||
<div class="pswp__container">
|
||||
<div class="pswp__item"></div>
|
||||
<div class="pswp__item"></div>
|
||||
<div class="pswp__item"></div>
|
||||
</div>
|
||||
|
||||
<div class="pswp__ui pswp__ui--hidden">
|
||||
<div class="pswp__top-bar">
|
||||
<div class="pswp__counter"></div>
|
||||
|
||||
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
|
||||
<button class="pswp__button pswp__button--share" title="Share"></button>
|
||||
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
|
||||
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
|
||||
|
||||
<div class="pswp__preloader">
|
||||
<div class="pswp__preloader__icn">
|
||||
<div class="pswp__preloader__cut">
|
||||
<div class="pswp__preloader__donut"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
|
||||
<div class="pswp__share-tooltip"></div>
|
||||
</div>
|
||||
|
||||
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button>
|
||||
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button>
|
||||
|
||||
<div class="pswp__caption">
|
||||
<div class="pswp__caption__center"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
47
partials/post-card.hbs
Normal file
@@ -0,0 +1,47 @@
|
||||
<article class="gh-card {{post_class}}{{#unless @custom.show_images_in_feed}} no-image{{/unless}}">
|
||||
<a class="gh-card-link" href="{{url}}">
|
||||
{{#if feature_image}}
|
||||
<figure class="gh-card-image">
|
||||
<img
|
||||
srcset="{{img_url feature_image size="xs" format="webp"}} 160w,
|
||||
{{img_url feature_image size="s" format="webp"}} 320w,
|
||||
{{img_url feature_image size="m" format="webp"}} 600w,
|
||||
{{img_url feature_image size="l" format="webp"}} 960w,
|
||||
{{img_url feature_image size="xl" format="webp"}} 1200w,
|
||||
{{img_url feature_image size="xxl" format="webp"}} 2000w"
|
||||
sizes="{{#if imageSizes}}{{imageSizes}}{{else}}320px{{/if}}"
|
||||
src="{{img_url feature_image size="m"}}"
|
||||
alt="{{#if feature_image_alt}}{{feature_image_alt}}{{else}}{{title}}{{/if}}"
|
||||
{{#if lazyLoad}}loading="lazy"{{/if}}
|
||||
>
|
||||
</figure>
|
||||
{{/if}}
|
||||
<div class="gh-card-wrapper">
|
||||
{{#if primary_tag}}
|
||||
<p class="gh-card-tag">{{primary_tag.name}}</p>
|
||||
{{/if}}
|
||||
<h3 class="gh-card-title is-title">{{title}}</h3>
|
||||
{{#if custom_excerpt}}
|
||||
<p class="gh-card-excerpt is-body">{{custom_excerpt}}</p>
|
||||
{{/if}}
|
||||
{{#unless custom_excerpt}}
|
||||
{{#if excerpt}}
|
||||
<p class="gh-card-excerpt is-body">{{excerpt}}</p>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
<footer class="gh-card-meta">
|
||||
{{#unless access}}
|
||||
{{^has visibility="public"}}
|
||||
{{> "icons/lock"}}
|
||||
{{/has}}
|
||||
{{/unless}}<!--
|
||||
-->{{#if @custom.show_author}}
|
||||
<span class="gh-card-author">By {{#foreach authors}}{{#if @first}}{{name}}{{else}}, {{name}}{{/if}}{{/foreach}}</span>
|
||||
{{/if}}
|
||||
{{#if @custom.show_publish_date}}
|
||||
<time class="gh-card-date" datetime="{{date format="YYYY-MM-DD"}}">{{date}}</time>
|
||||
{{/if}}<!--
|
||||
--></footer>
|
||||
</div>
|
||||
</a>
|
||||
</article>
|
3
partials/search-toggle.hbs
Normal file
@@ -0,0 +1,3 @@
|
||||
<button class="gh-search gh-icon-button" aria-label="Search this site" data-ghost-search>
|
||||
{{> "icons/search"}}
|
||||
</button>
|
15
partials/typography/fonts.hbs
Normal file
@@ -0,0 +1,15 @@
|
||||
{{!-- Sans-serif font is always loaded, because it's the default font for some part of the theme regardless of the settings --}}
|
||||
{{> "typography/sans"}}
|
||||
|
||||
{{#match @custom.title_font "Modern sans-serif"}}
|
||||
{{#match @custom.body_font "Elegant serif"}}
|
||||
{{> "typography/serif"}}
|
||||
{{/match}}
|
||||
{{else match @custom.title_font "Elegant serif"}}
|
||||
{{> "typography/serif"}}
|
||||
{{else}}
|
||||
{{> "typography/mono"}}
|
||||
{{#match @custom.body_font "Elegant serif"}}
|
||||
{{> "typography/serif"}}
|
||||
{{/match}}
|
||||
{{/match}}
|
21
partials/typography/mono.hbs
Normal file
@@ -0,0 +1,21 @@
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{asset "fonts/jetbrains-mono-roman.woff2"}}" crossorigin="anonymous">
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{asset "fonts/jetbrains-mono-italic.woff2"}}" crossorigin="anonymous">
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "JetBrains Mono";
|
||||
font-style: normal;
|
||||
font-weight: 100 800;
|
||||
font-display: optional;
|
||||
src: url({{asset "fonts/jetbrains-mono-roman.woff2"}}) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "JetBrains Mono";
|
||||
font-style: italic;
|
||||
font-weight: 100 800;
|
||||
font-display: optional;
|
||||
src: url({{asset "fonts/jetbrains-mono-italic.woff2"}}) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
</style>
|
11
partials/typography/sans.hbs
Normal file
@@ -0,0 +1,11 @@
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{asset "fonts/inter-roman.woff2"}}" crossorigin="anonymous">
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "Inter";
|
||||
font-style: normal;
|
||||
font-weight: 100 900;
|
||||
font-display: optional;
|
||||
src: url({{asset "fonts/inter-roman.woff2"}}) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
</style>
|
21
partials/typography/serif.hbs
Normal file
@@ -0,0 +1,21 @@
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{asset "fonts/eb-garamond-roman.woff2"}}" crossorigin="anonymous">
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{asset "fonts/eb-garamond-italic.woff2"}}" crossorigin="anonymous">
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "EB Garamond";
|
||||
font-style: normal;
|
||||
font-weight: 400 800;
|
||||
font-display: optional;
|
||||
src: url({{asset "fonts/eb-garamond-roman.woff2"}}) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "EB Garamond";
|
||||
font-style: italic;
|
||||
font-weight: 400 800;
|
||||
font-display: optional;
|
||||
src: url({{asset "fonts/eb-garamond-italic.woff2"}}) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
</style>
|