update
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
// =============================================================================
|
||||
// layout/_footer.scss
|
||||
// =============================================================================
|
||||
|
||||
.site-footer {
|
||||
margin-top: var(--space-6);
|
||||
background-color: var(--color-surface);
|
||||
border-top: 1px solid var(--color-border);
|
||||
padding-top: var(--space-5);
|
||||
}
|
||||
|
||||
.footer-site-name {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: var(--space-2);
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-site-description {
|
||||
color: #6b7280;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: var(--space-3);
|
||||
}
|
||||
|
||||
.footer-menu-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: none;
|
||||
transition: color var(--transition-base);
|
||||
|
||||
&:hover {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.social-menu-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--space-2);
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
a {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2.25rem;
|
||||
height: 2.25rem;
|
||||
border-radius: 50%;
|
||||
background-color: var(--color-border);
|
||||
color: var(--color-text);
|
||||
transition:
|
||||
background-color var(--transition-base),
|
||||
color var(--transition-base);
|
||||
|
||||
&:hover {
|
||||
background-color: var(--color-primary);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-widget-title {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: var(--space-3);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
margin-top: var(--space-5);
|
||||
padding: var(--space-3) 0;
|
||||
border-top: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
.footer-copyright {
|
||||
color: #6b7280;
|
||||
font-size: 0.875rem;
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
|
||||
&:hover {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
// =============================================================================
|
||||
// layout/_grid.scss
|
||||
// Site-wide layout helpers.
|
||||
// =============================================================================
|
||||
|
||||
.site-content {
|
||||
padding-top: var(--space-4);
|
||||
padding-bottom: var(--space-6);
|
||||
}
|
||||
|
||||
// Primary content area + sidebar layout.
|
||||
.content-area {
|
||||
@include desktop {
|
||||
display: flex;
|
||||
gap: var(--space-5);
|
||||
|
||||
#main {
|
||||
flex: 1;
|
||||
min-width: 0; // Prevent flex blowout.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Responsive post grid.
|
||||
.posts-grid {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
// Pagination.
|
||||
.posts-pagination {
|
||||
margin-top: var(--space-4);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
gap: var(--space-2);
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
a,
|
||||
span {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 2.25rem;
|
||||
height: 2.25rem;
|
||||
padding: 0 var(--space-2);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 6px;
|
||||
color: var(--color-text);
|
||||
text-decoration: none;
|
||||
transition:
|
||||
background-color var(--transition-base),
|
||||
color var(--transition-base),
|
||||
border-color var(--transition-base);
|
||||
|
||||
&:hover,
|
||||
&.current {
|
||||
background-color: var(--color-primary);
|
||||
color: #fff;
|
||||
border-color: var(--color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
// =============================================================================
|
||||
// layout/_header.scss
|
||||
// =============================================================================
|
||||
|
||||
.site-navbar {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
background-color: var(--navbar-bg);
|
||||
box-shadow: var(--navbar-shadow);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
transition: box-shadow var(--transition-base), background-color var(--transition-base);
|
||||
|
||||
&.is-scrolled {
|
||||
box-shadow: 0 4px 12px var(--color-shadow);
|
||||
}
|
||||
}
|
||||
|
||||
// Logo area.
|
||||
.navbar-logo {
|
||||
padding: 0.5rem 0.75rem;
|
||||
|
||||
img {
|
||||
max-height: 2.5rem;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-site-name {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--color-dark) !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.site-title-initial {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border-radius: 50%;
|
||||
background-color: var(--color-primary);
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
// Hamburger burger – three-line → X animation.
|
||||
.navbar-burger {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0.5rem;
|
||||
transition: opacity var(--transition-base);
|
||||
|
||||
span {
|
||||
display: block;
|
||||
width: 1.25rem;
|
||||
height: 2px;
|
||||
background: var(--color-text);
|
||||
margin: 4px 0;
|
||||
transition:
|
||||
transform 0.3s ease,
|
||||
opacity 0.3s ease;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
&.is-active span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
|
||||
&.is-active span:nth-child(2) { opacity: 0; }
|
||||
&.is-active span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }
|
||||
}
|
||||
|
||||
// Search widget.
|
||||
.navbar-search-wrap {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.navbar-search-toggle {
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: var(--color-text);
|
||||
font-size: 1rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
transition: color var(--transition-base);
|
||||
|
||||
&:hover {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
@include focus-ring;
|
||||
}
|
||||
|
||||
.navbar-search-form {
|
||||
position: absolute;
|
||||
top: 110%;
|
||||
right: 0;
|
||||
background: var(--color-background);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 6px;
|
||||
padding: 0.5rem;
|
||||
box-shadow: var(--card-shadow);
|
||||
min-width: 200px;
|
||||
|
||||
.input {
|
||||
border-color: var(--color-border);
|
||||
background: var(--color-background);
|
||||
color: var(--color-text);
|
||||
}
|
||||
}
|
||||
|
||||
// Dark-mode toggle.
|
||||
.theme-toggle {
|
||||
background: transparent;
|
||||
border: none;
|
||||
font-size: 1rem;
|
||||
color: var(--color-text);
|
||||
padding: 0.25rem 0.5rem;
|
||||
transition: color var(--transition-base);
|
||||
line-height: 1;
|
||||
|
||||
&:hover {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
@include focus-ring;
|
||||
}
|
||||
|
||||
// Show only the relevant icon.
|
||||
body:not([data-theme='dark']) .theme-toggle__light-icon { display: none; }
|
||||
[data-theme='dark'] .theme-toggle__dark-icon { display: none; }
|
||||
|
||||
// Back-to-top button.
|
||||
.back-to-top {
|
||||
position: fixed;
|
||||
bottom: 2rem;
|
||||
right: 2rem;
|
||||
z-index: 200;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
background-color: var(--color-primary);
|
||||
color: #fff;
|
||||
border: none;
|
||||
font-size: 1.25rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: var(--card-shadow);
|
||||
transition:
|
||||
opacity var(--transition-base),
|
||||
transform var(--transition-base),
|
||||
box-shadow var(--transition-base);
|
||||
opacity: 0;
|
||||
transform: translateY(1rem);
|
||||
pointer-events: none;
|
||||
|
||||
&.is-visible {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: var(--card-shadow-hover);
|
||||
}
|
||||
|
||||
@include focus-ring;
|
||||
}
|
||||
|
||||
// Skip link.
|
||||
.skip-link {
|
||||
@include visually-hidden;
|
||||
|
||||
&:focus {
|
||||
position: fixed;
|
||||
top: var(--space-2);
|
||||
left: var(--space-2);
|
||||
z-index: 9999;
|
||||
background: var(--color-primary);
|
||||
color: #fff;
|
||||
padding: var(--space-2) var(--space-3);
|
||||
border-radius: 4px;
|
||||
clip: auto;
|
||||
height: auto;
|
||||
width: auto;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// =============================================================================
|
||||
// layout/_sidebar.scss
|
||||
// =============================================================================
|
||||
|
||||
.widget-area {
|
||||
.widget {
|
||||
border-radius: var(--card-radius);
|
||||
overflow: hidden;
|
||||
|
||||
.card-content {
|
||||
padding-top: var(--space-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sticky sidebar on desktop.
|
||||
@include desktop {
|
||||
#secondary.widget-area {
|
||||
position: sticky;
|
||||
top: calc(var(--space-5) + 60px); // 60px = approx navbar height.
|
||||
align-self: flex-start;
|
||||
max-height: calc(100vh - 100px);
|
||||
overflow-y: auto;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user