v0.1.40 홈 피드 및 문서 버전 정리

Made-with: Cursor
This commit is contained in:
2026-04-16 12:00:28 +09:00
parent 3f01b8b808
commit f839a1fba7
26 changed files with 520 additions and 235 deletions

View File

@@ -1,5 +1,4 @@
<aside class="sidebar sidebar--left">
<div class="sidebar__inner">
<nav class="menu-groups border-b border-brd pl-4 pr-3 sm:pl-5 xl:pl-0 py-3" data-nav="menu" data-primary-nav x-data="{ homePagesOpen: true, membersOpen: false }">
<ul class="menu-groups__list flex flex-col gap-0.75 text-typ text-sm">
<li class="menu-group menu-group--nav nav-toggle is-mainitem flex items-center flex-wrap w-full relative group" :class="{ 'is-open': homePagesOpen }" data-label="Home pages" data-slug="home-pages" data-length="10" aria-haspopup="true">
@@ -64,7 +63,7 @@
</button>
<div class="sidebar-card__content sidebar-card__content--categories" x-cloak x-show="categoriesOpen">
<ul class="category-grid grid sm:grid-cols-2 gap-x-2 gap-0.5 mt-1 text-typ-tone font-medium text-[0.8rem] -mb-1.5">
{{#get "tags" limit="10" include="count.posts"}}
{{#get "tags" limit="11" include="count.posts"}}
{{#foreach tags}}
<li>
<a class="category-chip group flex items-center gap-2 leading-tight pl-0 pr-3 py-2 rounded-theme hover:bg-bgr-tone hover:px-3 hover:text-typ transition-[padding]" href="{{url}}" aria-label="{{name}}"{{#if accent_color}} style="--color-accent: {{accent_color}};"{{/if}}>
@@ -79,7 +78,7 @@
</div>
</section>
<section class="sidebar-card">
<section class="px-5 sm:px-6 py-4 sm:py-5 xl:pl-0 pr-3 sm:pr-3 flex flex-col gap-1.5 border-b border-brd">
<div class="sidebar-card__header">
<h2>Authors</h2>
</div>
@@ -102,12 +101,15 @@
</div>
</section>
<footer class="sidebar-footer">
<a href="{{@custom.footer_primary_url}}">{{@custom.footer_primary_link}}</a>
<a href="{{@custom.footer_secondary_url}}">{{@custom.footer_secondary_link}}</a>
<a href="{{@custom.footer_tertiary_url}}">{{@custom.footer_tertiary_link}}</a>
<a href="{{@custom.footer_quaternary_url}}">{{@custom.footer_quaternary_link}}</a>
<button class="icon-button icon-button--plain" type="button" data-theme-toggle aria-label="Toggle theme">◐</button>
<span class="flex-1"></span>
<nav class="pl-4 pr-3 sm:pl-5 xl:pl-1 py-2 flex items-center justify-between gap-2">
<ul class="flex flex-wrap items-center gap-3 text-typ-tone text-xs mb-2">
<li><a href="{{@custom.footer_primary_url}}">{{@custom.footer_primary_link}}</a></li>
<li><a href="{{@custom.footer_secondary_url}}">{{@custom.footer_secondary_link}}</a></li>
<li><a href="{{@custom.footer_tertiary_url}}">{{@custom.footer_tertiary_link}}</a></li>
<li><a href="{{@custom.footer_quaternary_url}}">{{@custom.footer_quaternary_link}}</a></li>
</ul>
<button class="flex items-center self-start gap-1 p-1 size-6 rounded-theme hover:bg-bgr-tone cursor-pointer text-xs font-medium" data-theme-toggle aria-label="Toggle theme">◐</button>
</footer>
</div>
</aside>

View File

@@ -1,36 +1,39 @@
<aside class="sidebar sidebar--right">
<div class="sidebar__inner sidebar__inner--right">
{{#is "post"}}
{{#post}}
{{#primary_author}}
<section class="author-feature author-feature--top">
{{#if profile_image}}
<img class="avatar avatar--large" src="{{img_url profile_image size="s"}}" alt="{{name}}">
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-1.5 border-b border-brd">
<a class="flex gap-2 hover:opacity-80">{{#if profile_image}}
<img class="object-cover size-10 sm:size-12 aspect-square" src="{{img_url profile_image size="s"}}" alt="{{name}}">
{{else}}
<div class="avatar avatar--large avatar--fallback">A</div>
<div class="object-cover size-10 sm:size-12 aspect-square avatar--fallback">A</div>
{{/if}}
<div class="author-feature__body">
<h3>{{name}}</h3>
{{#if bio}}<p>{{bio}}</p>{{/if}}
<div class="flex-1 flex flex-col gap-1">
<h3 class="text-sm font-medium leading-tight flex items-center justify-between gap-1">{{name}}</h3>
{{#if bio}}<p class="text-xs text-typ-tone leading-tight line-clamp-3 text-overflow-ellipsis">{{bio}}</p>{{/if}}
</div>
<span class="author-feature__action">↗</span>
</a>
</section>
{{/primary_author}}
{{/post}}
{{/is}}
<section class="site-intro">
{{#if @site.icon}}
<img class="site-icon" src="{{@site.icon}}" alt="{{@site.title}}">
{{else}}
<div class="site-icon site-icon--fallback">T</div>
{{/if}}
<div class="about-block">
<h2>{{@site.title}}</h2>
{{#if @site.description}}
<p>{{@site.description}}</p>
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-3 border-b border-brd ">
<div class="flex items-center gap-2.5">
{{#if @site.icon}}
<img class="w-12 min-h-12 rounded-md h-full relative" src="{{@site.icon}}" alt="{{@site.title}}">
{{else}}
<div class="w-12 min-h-12 rounded-md h-full relative site-icon--fallback">T</div>
{{/if}}
<div class="flex flex-col gap-0.5">
<h2 class="text-sm md:text-base font-medium leading-tight">{{@site.title}}</h2>
{{#if @site.description}}
<p class="text-sm text-typ-tone leading-tight">{{@site.description}}</p>
{{/if}}
</div>
</div>
</section>
{{subscribe_form
@@ -38,57 +41,71 @@
button_class="button button--subscribe"
form_class="subscribe-form"
}}
<section class="sidebar-card sidebar-card--tight">
<div class="sidebar-card__header">
<h2>Follow</h2>
<span class="sidebar-card__action"></span>
</div>
<div class="social-row">
{{#if @site.facebook}}<a href="{{social_url type="facebook"}}" aria-label="Facebook">f</a>{{/if}}
{{#if @site.twitter}}<a href="{{social_url type="twitter"}}" aria-label="X">x</a>{{/if}}
<a href="{{@site.url}}/rss/" aria-label="RSS">rss</a>
</div>
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-wrap items-center justify-between gap-1.5 border-b border-brd">
<h2 class="uppercase font-medium text-xs text-typ-tone">Follow</h2>
<nav class="relative flex flex-wrap items-center gap-1 text-typ text-sm z-10">
{{!-- {{#if @site.facebook}}<a href="{{social_url type="facebook"}}" class="hover:opacity-75 p-0.5" aria-label="Facebook">f</a>{{/if}} --}}
{{#if @site.twitter}}<a href="{{social_url type="twitter"}}" class="w-5 h-5 hover:opacity-75 p-0.5" aria-label="X">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="20" height="20" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M4 4l11.733 16h4.267l-11.733 -16z"></path>
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path>
</svg>
</a>{{/if}}
<a href="{{@site.url}}/rss/" class="hover:w-5 h-5 opacity-75 p-0.5" aria-label="RSS">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-rss" width="20" height="20" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<circle cx="5" cy="19" r="1"></circle>
<path d="M4 4a16 16 0 0 1 16 16"></path>
<path d="M4 11a9 9 0 0 1 9 9"></path>
</svg>
</a>
</nav>
</section>
<section class="sidebar-card sidebar-card--tight">
<div class="sidebar-card__header">
<h2>Recommended</h2>
<span class="sidebar-card__action">↗</span>
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-1.5 border-b border-brd">
<div class="flex items-center justify-between gap-2 mb-2">
<h2 class="uppercase font-medium text-xs text-typ-tone">Recommended</h2>
<button class="text-sm font-medium flex items-center gap-1 rounded-btn group bg-bgr text-typ hover:text-typ-tone cursor-pointer gh-portal-close">↗</button>
</div>
<ul class="recommended-list">
<ul class="flex flex-col gap-1 rounded-theme overflow-hidden">
{{#get "posts" filter="featured:true" limit="3" include="tags"}}
{{#foreach posts}}
<li><a href="{{url}}">{{title}}</a></li>
<li><a href="{{url}}" class="py-1 text-[0.8rem] leading-tight flex items-center gap-2 hover:opacity-75">{{title}}</a></li>
{{/foreach}}
{{else}}
<li><a href="{{@site.url}}">{{@site.title}}</a></li>
<li><a href="{{@site.url}}" class="py-1 text-[0.8rem] leading-tight flex items-center gap-2 hover:opacity-75">{{@site.title}}</a></li>
{{/get}}
</ul>
</section>
<section class="sidebar-card sidebar-card--about">
<p>{{@site.title}} is a thoughtfully designed Ghost theme inspired by editorial communities, with flexible settings that let you shape it to your publication.</p>
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-2.5 border-b border-brd">
<p class="text-sm white-space: pre-wrap;">{{@site.title}} is a thoughtfully designed Ghost theme inspired by editorial communities, with flexible settings that let you shape it to your publication.</p>
<a class="button button--accent" href="{{@site.url}}">About {{@site.title}}</a>
</section>
{{#is "post"}}
{{#post}}
<section class="sidebar-card sidebar-card--tight">
<div class="sidebar-card__header">
<h2>Read next</h2>
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-1.5 border-b border-brd">
<div class="flex items-center justify-between gap-2 mb-1">
<h2 class="uppercase font-medium text-xs text-typ-tone">Read next</h2>
</div>
<ul class="recommended-list">
<ul class="flex flex-col gap-0.5 rounded-theme overflow-hidden">
{{#get "posts" filter=(concat "id:-" id) limit="4"}}
{{#foreach posts}}
<li><a href="{{url}}">{{title}}</a></li>
<li class="style-none"><a href="{{url}}" class="py-1 text-[0.8rem] leading-tight flex items-center gap-2 hover:opacity-75"><h3 class="font-medium line-clamp-1 text-ellipsis overflow-hidden">{{title}}</h3></a></li>
{{/foreach}}
{{/get}}
</ul>
</section>
{{/post}}
{{/is}}
<footer class="copyright">©{{date format="YYYY"}} {{@site.title}}. Published with Ghost.</footer>
</div>
<span class="md:flex-1"></span>
<footer class="px-5 sm:px-6 xl:pr-1">
<div class="py-3 flex flex-col items-start justify-start text-typ-tone text-xs">
©{{date format="YYYY"}} {{@site.title}}. Published with Ghost.
</div>
</footer>
</aside>

View File

@@ -1,28 +1,28 @@
<header class="topbar">
<div class="topbar__inner">
<div class="topbar__brand flex items-center gap-3">
<button class="topbar__sidebar-toggle" type="button" data-left-sidebar-toggle aria-expanded="true" aria-label="Toggle left sidebar">
<header class="topbar border-b border-brd bg-bgr/95 supports-[backdrop-filter]:bg-bgr/80">
<div class="topbar__inner mx-auto">
<div class="topbar__brand flex h-full items-center gap-3 px-4">
<button class="topbar__sidebar-toggle inline-flex items-center justify-center rounded-theme hover:bg-bgr-tone" type="button" data-left-sidebar-toggle aria-expanded="true" aria-label="Toggle left sidebar">
<img class="topbar__sidebar-toggle-icon topbar__sidebar-toggle-icon--open" src="{{asset "icons/left_panel_open.svg"}}" alt="">
<img class="topbar__sidebar-toggle-icon topbar__sidebar-toggle-icon--close" src="{{asset "icons/left_panel_close.svg"}}" alt="">
</button>
<a class="brand brand--topbar" href="{{@site.url}}">
<a class="brand brand--topbar inline-flex items-center gap-2.5 whitespace-nowrap" href="{{@site.url}}">
<span class="brand__name">{{@site.title}}</span>
</a>
</div>
<div class="topbar__search">
<button class="search-trigger" type="button" data-search-open aria-label="Open search">
<div class="topbar__search flex h-full items-center justify-center px-4">
<button class="search-trigger flex w-full max-w-xs items-center gap-2.5 rounded-xl border border-brd bg-bgr px-3.5 py-2 text-sm text-typ-tone transition-colors hover:bg-bgr-tone hover:text-typ" type="button" data-search-open aria-label="Open search">
<img class="search-trigger__icon" src="{{asset "icons/search.svg"}}" alt="">
<span>Search</span>
<span class="search-shortcut">/</span>
</button>
</div>
<div class="topbar__actions flex items-center justify-end gap-2">
<button class="icon-button icon-button--search-mobile" type="button" data-search-open aria-label="Open search">
<div class="topbar__actions flex h-full items-center justify-end gap-2 px-4">
<button class="icon-button icon-button--search-mobile inline-flex items-center justify-center rounded-theme border border-brd bg-bgr hover:bg-bgr-tone" type="button" data-search-open aria-label="Open search">
<img class="search-trigger__icon" src="{{asset "icons/search.svg"}}" alt="">
</button>
{{#if @custom.show_admin_link}}
<a class="button button--accent" href="/ghost/">Admin</a>
<a class="icon-button icon-button--profile" href="/ghost/" aria-label="Ghost admin"><span></span></a>
<a class="button button--accent rounded-theme" href="/ghost/">Admin</a>
<a class="icon-button icon-button--profile rounded-full border border-brd bg-bgr hover:bg-bgr-tone" href="/ghost/" aria-label="Ghost admin"><span></span></a>
{{/if}}
</div>
</div>
@@ -33,10 +33,10 @@
<div class="search-modal__panel">
<div class="search-modal__input">
<button type="button" class="icon-button icon-button--plain" data-search-close aria-label="Close search">×</button>
<input type="search" placeholder="Search posts, tags and authors" data-search-input>
<input type="search" placeholder="게시물, 태그, 작성자 검색" data-search-input>
</div>
<div class="search-modal__body" data-search-results>
<p class="search-modal__hint">Start typing to filter visible posts, tags, and authors in the current page.</p>
<p class="search-modal__hint">현재 페이지에 표시되는 게시물, 태그 및 작성자를 필터링하려면 입력을 시작하세요.</p>
</div>
</div>
</div>