This commit is contained in:
Ty Clifford
2026-07-03 07:31:09 -04:00
commit cebb0d3af1
800 changed files with 89782 additions and 0 deletions
BIN
View File
Binary file not shown.
+803
View File
@@ -0,0 +1,803 @@
/* ==========================================================================
Apple-inspired Design System
Clean, minimal, with elegant typography and subtle animations
========================================================================== */
:root {
/* Apple-inspired color palette */
--color-primary: #0071e3;
--color-primary-hover: #0077ed;
--color-secondary: #86868b;
--color-text: #1d1d1f;
--color-text-muted: #6e6e73;
--color-background: #ffffff;
--color-background-secondary: #fbfbfd;
--color-background-tertiary: #f5f5f7;
--color-border: #d2d2d7;
--color-border-light: #e8e8ed;
--color-success: #34c759;
--color-warning: #ff9f0a;
--color-error: #ff3b30;
/* Typography */
--font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", Helvetica, Arial, sans-serif;
--font-weight-regular: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
/* Font sizes - fluid and responsive */
--font-size-base: 1.0625rem; /* 17px - improved readability */
--font-size-sm: 0.9375rem; /* 15px */
--font-size-xs: 0.875rem; /* 14px */
--font-size-lg: 1.1875rem; /* 19px */
--font-size-xl: 1.375rem; /* 22px */
--font-size-h1: clamp(2.25rem, 5vw, 3.5rem); /* 36px-56px - responsive */
--font-size-h2: clamp(1.875rem, 4vw, 2.5rem); /* 30px-40px */
--font-size-h3: clamp(1.5rem, 3vw, 2rem); /* 24px-32px */
--font-size-h4: clamp(1.25rem, 2.5vw, 1.5rem); /* 20px-24px */
--font-size-h5: 1.125rem; /* 18px */
--font-size-h6: 1rem; /* 16px */
/* Line heights for better readability */
--line-height-base: 1.6;
--line-height-tight: 1.3;
--line-height-loose: 1.8;
/* Spacing */
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 1.5rem;
--spacing-xl: 2rem;
--spacing-2xl: 3rem;
--spacing-3xl: 4rem;
/* Border radius */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 18px;
--radius-xl: 22px;
/* Shadows */
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.04);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12);
/* Transitions */
--transition-fast: 0.15s ease;
--transition-normal: 0.25s ease;
--transition-slow: 0.4s ease;
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
:root {
--color-primary: #2997ff;
--color-primary-hover: #47a9ff;
--color-secondary: #a1a1a6;
--color-text: #f5f5f7;
--color-text-muted: #a1a1a6;
--color-background: #000000;
--color-background-secondary: #161617;
--color-background-tertiary: #1d1d1f;
--color-border: #424245;
--color-border-light: #2d2d2d;
}
body {
background-color: var(--color-background);
}
.navbar-dark {
background-color: rgba(0, 0, 0, 0.8) !important;
}
.bg-light {
background-color: var(--color-background-tertiary) !important;
}
.bg-dark {
background-color: var(--color-background-tertiary) !important;
}
.text-dark {
color: var(--color-text) !important;
}
.form-control {
background-color: var(--color-background-secondary);
border-color: var(--color-border);
color: var(--color-text);
}
}
html {
position: relative;
min-height: 100%;
scroll-behavior: smooth;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
font-family: var(--font-family);
font-size: var(--font-size-base);
font-weight: var(--font-weight-regular);
color: var(--color-text);
background-color: var(--color-background);
padding-top: 56px;
margin-bottom: 100px;
line-height: var(--line-height-base);
letter-spacing: -0.022em;
}
/* Skip link for accessibility */
.skip-link {
position: absolute;
top: -40px;
left: 0;
background: var(--color-primary);
color: #fff;
padding: 8px 16px;
z-index: 9999;
transition: top var(--transition-normal);
border-radius: 0 0 var(--radius-sm) 0;
}
.skip-link:focus {
top: 0;
}
section {
padding: 80px 0;
}
img {
max-width: 100%;
height: auto;
}
/* Links */
a {
color: var(--color-primary);
text-decoration: none;
transition: color var(--transition-fast), opacity var(--transition-fast);
}
a:hover {
color: var(--color-primary-hover);
}
a:focus {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
border-radius: 4px;
}
/* Typography */
h1, h2, h3, h4, h5, h6 {
font-weight: var(--font-weight-semibold);
letter-spacing: -0.022em;
color: var(--color-text);
}
h1.title {
font-size: var(--font-size-h1);
line-height: var(--line-height-tight);
font-weight: var(--font-weight-bold);
margin-bottom: 1.5rem;
}
h2.title {
font-size: var(--font-size-h2);
line-height: var(--line-height-tight);
font-weight: var(--font-weight-semibold);
margin-bottom: 1rem;
}
h2.title a {
color: var(--color-text);
text-decoration: none;
transition: color var(--transition-fast);
}
h2.title a:hover {
color: var(--color-primary);
}
/* Code blocks */
pre,
code {
background: var(--color-background-tertiary);
color: var(--color-text);
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Monaco, monospace;
font-size: var(--font-size-sm);
border-radius: var(--radius-sm);
}
pre {
padding: var(--spacing-md);
overflow-x: auto;
border: 1px solid var(--color-border-light);
}
code {
display: inline-block;
padding: 0.125em 0.5em;
line-height: 1.5;
}
/* Tables */
table {
empty-cells: show;
border: 1px solid var(--color-border-light);
width: 100%;
font-size: var(--font-size-base);
margin-bottom: var(--spacing-md);
border-collapse: collapse;
border-radius: var(--radius-md);
overflow: hidden;
}
thead {
background-color: var(--color-background-tertiary);
color: var(--color-text);
text-align: left;
vertical-align: bottom;
font-weight: var(--font-weight-medium);
}
tr {
display: table-row;
vertical-align: inherit;
border-color: inherit;
}
tbody tr:nth-child(even) {
background-color: var(--color-background-secondary);
}
tbody tr:hover {
background-color: var(--color-background-tertiary);
}
th,
td {
padding: 0.75em 1em;
border-bottom: 1px solid var(--color-border-light);
}
/* Blockquote */
blockquote {
padding: var(--spacing-md) var(--spacing-lg);
margin: var(--spacing-lg) 0;
border-left: 4px solid var(--color-primary);
font-style: italic;
background-color: var(--color-background-secondary);
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
color: var(--color-text-muted);
}
.bi {
margin-right: 0.5rem !important;
}
/* Buttons */
.btn {
font-weight: var(--font-weight-medium);
border-radius: var(--radius-xl);
padding: 0.5rem 1.25rem;
transition: all var(--transition-fast);
border: none;
}
.btn-primary {
background: var(--color-primary);
color: #fff;
}
.btn-primary:hover {
background: var(--color-primary-hover);
transform: scale(1.02);
}
.btn-outline-primary {
background: transparent;
color: var(--color-primary);
border: 1.5px solid var(--color-primary);
}
.btn-outline-primary:hover {
background: var(--color-primary);
color: #fff;
}
.btn:focus {
box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.3);
}
/* Paginator */
.paginator {
margin-top: var(--spacing-2xl);
margin-bottom: var(--spacing-3xl);
}
.paginator .pagination {
gap: var(--spacing-sm);
}
.paginator .page-item .page-link {
border: none;
background: var(--color-background-tertiary);
color: var(--color-text);
border-radius: var(--radius-xl);
padding: 0.5rem 1rem;
font-weight: var(--font-weight-medium);
transition: all var(--transition-fast);
}
.paginator .page-item .page-link:hover {
background: var(--color-primary);
color: #fff;
}
.paginator .page-item.disabled .page-link {
background: var(--color-background-secondary);
color: var(--color-text-muted);
}
.paginator .page-link:focus {
box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.3);
}
/* ==========================================================================
Navbar - Apple style frosted glass effect
========================================================================== */
.navbar {
transition: background-color var(--transition-normal);
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px);
background-color: rgba(29, 29, 31, 0.8) !important;
}
.navbar-brand {
font-weight: var(--font-weight-semibold);
font-size: var(--font-size-h4);
letter-spacing: -0.01em;
}
img.nav-svg-icon {
width: 1rem;
height: 1rem;
padding-bottom: 2px;
transition: opacity var(--transition-fast);
filter: brightness(0) invert(1);
}
img.nav-svg-icon:hover {
opacity: 0.7;
}
.nav-link {
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
letter-spacing: 0.02em;
transition: color var(--transition-fast);
padding: 0.5rem 0.75rem !important;
}
.nav-item.active .nav-link {
font-weight: var(--font-weight-semibold);
}
/* ==========================================================================
Footer
========================================================================== */
footer.footer {
position: absolute;
bottom: 0;
width: 100%;
min-height: 60px;
padding: var(--spacing-lg) 0;
font-size: 0.75rem;
background-color: var(--color-background-tertiary) !important;
color: var(--color-text-muted);
}
footer.footer.bg-dark {
background-color: var(--color-background-tertiary) !important;
}
footer.footer .text-white {
color: var(--color-text-muted) !important;
}
footer.footer a {
color: var(--color-primary) !important;
}
footer.footer a:hover {
color: var(--color-primary-hover) !important;
}
.mini-logo {
height: 18px;
padding-bottom: 3px;
opacity: 0.8;
}
/* ==========================================================================
Hero Section - Clean Modern Header
========================================================================== */
.hero {
padding: 100px 0 60px;
background: var(--color-background-secondary);
}
.hero-content {
max-width: 680px;
margin: 0 auto;
text-align: center;
}
.hero-title {
font-size: var(--font-size-h1);
font-weight: var(--font-weight-bold);
color: var(--color-text);
margin-bottom: var(--spacing-sm);
letter-spacing: -0.02em;
line-height: var(--line-height-tight);
}
.hero-subtitle {
color: var(--color-text-secondary);
font-size: var(--font-size-lg);
font-weight: var(--font-weight-regular);
line-height: var(--line-height-base);
margin: 0 auto;
max-width: 500px;
}
.hero-search {
margin-top: var(--spacing-xl);
}
.search-input-wrapper {
position: relative;
max-width: 320px;
margin: 0 auto;
}
.search-icon {
position: absolute;
right: 14px;
top: 50%;
transform: translateY(-50%);
color: var(--color-text-muted);
pointer-events: none;
}
.hero-search .form-control {
border-radius: var(--radius-full);
border: 1px solid var(--color-border);
padding: 0.75rem 1rem 0.75rem 42px;
font-size: var(--font-size-base);
transition: all var(--transition-fast);
background-color: var(--color-background-secondary);
width: 100%;
}
.hero-search .form-control:focus {
border-color: var(--color-primary);
box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.1);
background-color: var(--color-background);
}
.hero-search .form-control::placeholder {
color: var(--color-text-muted);
}
@media (min-width: 768px) {
.hero {
padding: 120px 0 80px;
}
.hero-subtitle {
font-size: var(--font-size-xl);
}
}
/* ==========================================================================
Search form (for non-hero contexts)
========================================================================== */
.search-form .form-control {
border-radius: var(--radius-lg);
border: 1px solid var(--color-border);
padding: 0.625rem 1rem;
font-size: var(--font-size-base);
transition: all var(--transition-fast);
background-color: var(--color-background);
}
.search-form .form-control:focus {
border-color: var(--color-primary);
box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.15);
}
.search-form .btn {
border-radius: var(--radius-lg);
}
/* ==========================================================================
Home - Articles List
========================================================================== */
article.home-page {
padding: var(--spacing-2xl) 0;
border-bottom: 1px solid var(--color-border-light);
position: relative;
background: var(--color-background);
}
article.home-page:nth-child(even) {
background: var(--color-background);
}
article.home-page:last-child {
border-bottom: none;
}
article.home-page header {
margin-bottom: var(--spacing-sm);
}
article.home-page h2.title {
margin-bottom: var(--spacing-xs);
}
/* Fix: Article footer should not be positioned absolutely */
article.home-page footer.mt-3 {
position: static;
background: transparent !important;
padding: 0;
min-height: auto;
width: auto;
margin-top: var(--spacing-md) !important;
}
article.home-page footer.mt-3 small {
font-size: var(--font-size-sm);
color: var(--color-text-muted);
}
/* ==========================================================================
Page article styles
========================================================================== */
article.page {
padding: var(--spacing-2xl) 0;
}
.page-header {
margin-bottom: var(--spacing-xl);
}
.page-meta {
font-size: var(--font-size-base);
color: var(--color-text-muted);
display: flex;
flex-wrap: wrap;
gap: var(--spacing-md);
}
.page-meta span {
display: inline-flex;
align-items: center;
}
.page-cover-image-wrapper {
margin-bottom: var(--spacing-xl);
}
.page-cover-image {
border-radius: var(--radius-lg);
box-shadow: var(--shadow-lg);
}
.page-description {
color: var(--color-text-muted);
font-size: var(--font-size-lg);
line-height: var(--line-height-loose);
margin-bottom: var(--spacing-lg);
}
.page-content {
font-size: var(--font-size-base);
line-height: var(--line-height-loose);
}
.page-content img {
border-radius: var(--radius-md);
margin: var(--spacing-lg) 0;
box-shadow: var(--shadow-sm);
}
.page-content p {
margin-bottom: var(--spacing-lg);
}
.page-content h2,
.page-content h3,
.page-content h4 {
margin-top: var(--spacing-2xl);
margin-bottom: var(--spacing-md);
}
.page-excerpt {
color: var(--color-text);
line-height: var(--line-height-base);
}
/* ==========================================================================
VIDEO EMBED RESPONSIVE
========================================================================== */
.video-embed {
overflow: hidden;
padding-bottom: 56.25%;
position: relative;
height: 0;
margin: var(--spacing-lg) 0;
border-radius: var(--radius-md);
box-shadow: var(--shadow-md);
}
.video-embed iframe {
left: 0;
top: 0;
height: 100%;
width: 100%;
position: absolute;
border: none;
}
/* ==========================================================================
Screen reader only - for accessibility
========================================================================== */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
padding: inherit;
margin: inherit;
overflow: visible;
clip: auto;
white-space: normal;
}
/* ==========================================================================
Print styles
========================================================================== */
@media print {
.navbar,
footer.footer,
.paginator,
.btn,
.search-form {
display: none !important;
}
body {
padding-top: 0;
margin-bottom: 0;
color: #000;
background: #fff;
}
article.page,
article.home-page {
padding: 0;
}
a {
color: #000;
text-decoration: underline;
}
}
/* ==========================================================================
Reduce motion for users who prefer it
========================================================================== */
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* ==========================================================================
Utility classes
========================================================================== */
.text-muted {
color: var(--color-text-muted) !important;
}
.text-primary {
color: var(--color-primary) !important;
}
/* ==========================================================================
Breadcrumb Navigation (SEO)
========================================================================== */
.breadcrumb-nav {
padding: var(--spacing-md) 0;
background-color: var(--color-background-secondary);
border-bottom: 1px solid var(--color-border-light);
}
.breadcrumb {
font-size: var(--font-size-sm);
margin-bottom: 0;
}
.breadcrumb-item + .breadcrumb-item::before {
content: "";
color: var(--color-text-muted);
}
.breadcrumb-item a {
color: var(--color-primary);
text-decoration: none;
}
.breadcrumb-item a:hover {
text-decoration: underline;
}
.breadcrumb-item.active {
color: var(--color-text-muted);
}
/* ==========================================================================
Article Footer Fix (not the main footer)
========================================================================== */
.article-footer,
article.home-page footer.article-footer {
position: static !important;
background: transparent !important;
padding: 0 !important;
min-height: auto !important;
width: auto !important;
font-size: inherit !important;
}
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-bluesky-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-bluesky-icon">Bluesky icon</title>
<path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565C.139 1.908 0 3.08 0 3.768c0 .69.378 5.65.624 6.479c.815 2.736 3.713 3.66 6.383 3.364q.204-.03.415-.056q-.207.033-.415.056c-3.912.58-7.387 2.005-2.83 7.078c5.013 5.19 6.87-1.113 7.823-4.308c.953 3.195 2.05 9.271 7.733 4.308c4.267-4.308 1.172-6.498-2.74-7.078a9 9 0 0 1-.415-.056q.21.026.415.056c2.67.297 5.568-.628 6.383-3.364c.246-.828.624-5.79.624-6.478c0-.69-.139-1.861-.902-2.206c-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8" style="fill: rgba(255, 255, 255, 0.5)"/>
</svg>

After

Width:  |  Height:  |  Size: 799 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-codepen-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-codepen-icon">CodePen icon</title>
<path d="M24 8.182l-.018-.087-.017-.05c-.01-.024-.018-.05-.03-.075-.003-.018-.015-.034-.02-.05l-.035-.067-.03-.05-.044-.06-.046-.045-.06-.045-.046-.03-.06-.044-.044-.04-.015-.02L12.58.19c-.347-.232-.796-.232-1.142 0L.453 7.502l-.015.015-.044.035-.06.05-.038.04-.05.056-.037.045-.05.06c-.02.017-.03.03-.03.046l-.05.06-.02.06c-.02.01-.02.04-.03.07l-.01.05C0 8.12 0 8.15 0 8.18v7.497c0 .044.003.09.01.135l.01.046c.005.03.01.06.02.086l.015.05c.01.027.016.053.027.075l.022.05c0 .01.015.04.03.06l.03.04c.015.01.03.04.045.06l.03.04.04.04c.01.013.01.03.03.03l.06.042.04.03.01.014 10.97 7.33c.164.12.375.163.57.163s.39-.06.57-.18l10.99-7.28.014-.01.046-.037.06-.043.048-.036.052-.058.033-.045.04-.06.03-.05.03-.07.016-.052.03-.077.015-.045.03-.08v-7.5c0-.05 0-.095-.016-.14l-.014-.045.044.003zm-11.99 6.28l-3.65-2.44 3.65-2.442 3.65 2.44-3.65 2.44zm-1.034-6.674l-4.473 2.99L2.89 8.362l8.086-5.39V7.79zm-6.33 4.233l-2.582 1.73V10.3l2.582 1.726zm1.857 1.25l4.473 2.99v4.82L2.89 15.69l3.618-2.417v-.004zm6.537 2.99l4.474-2.98 3.613 2.42-8.087 5.39v-4.82zm6.33-4.23l2.583-1.72v3.456l-2.583-1.73zm-1.855-1.24L13.042 7.8V2.97l8.085 5.39-3.612 2.415v.003z" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-dribbble-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-dribbble-icon">Dribbble icon</title><path d="M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308 2.3-1.555 3.936-4.02 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.017-8.04 6.4 1.73 1.358 3.92 2.166 6.29 2.166 1.42 0 2.77-.29 4-.816zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.176zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702-1.81-1.61-4.19-2.586-6.795-2.586-.807 0-1.59.098-2.4.288zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04.24.49.47.985.68 1.486.08.18.15.36.22.53 3.41-.43 6.8.26 7.14.33-.02-2.42-.88-4.64-2.31-6.386z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-facebook-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-facebook-icon">Facebook icon</title>
<path d="M22.676 0H1.324C.593 0 0 .593 0 1.324v21.352C0 23.408.593 24 1.324 24h11.494v-9.294H9.689v-3.621h3.129V8.41c0-3.099 1.894-4.785 4.659-4.785 1.325 0 2.464.097 2.796.141v3.24h-1.921c-1.5 0-1.792.721-1.792 1.771v2.311h3.584l-.465 3.63H16.56V24h6.115c.733 0 1.325-.592 1.325-1.324V1.324C24 .593 23.408 0 22.676 0" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-github-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-github-icon">GitHub icon</title>
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 984 B

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitLab icon</title><path d="M23.955 13.587l-1.342-4.135-2.664-8.189c-.135-.423-.73-.423-.867 0L16.418 9.45H7.582L4.919 1.263C4.783.84 4.185.84 4.05 1.26L1.386 9.449.044 13.587c-.121.375.014.789.331 1.023L12 23.054l11.625-8.443c.318-.235.453-.647.33-1.024" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 381 B

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-instagram-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-instagram-icon">Instagram icon</title><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-linkedin-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-linkedin-icon">LinkedIn icon</title>
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" style="fill: rgb(154, 157, 160);"/>
</svg>

After

Width:  |  Height:  |  Size: 770 B

+1
View File
@@ -0,0 +1 @@
<svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>Mastodon icon</title><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1019 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-rss-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-rss-icon">RSS icon</title>
<path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z" style="fill: rgb(154, 157, 160);"/>
</svg>

After

Width:  |  Height:  |  Size: 550 B

+32
View File
@@ -0,0 +1,32 @@
<svg height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512" xml:space="preserve">
<path style="fill:#E1E1E3;" d="M483.643,42.893L18.751,222.234c-11.472,4.424-11.372,20.667,0.133,24.978l113.278,42.279
l43.845,141.006c2.806,9.031,13.849,12.369,21.179,6.377l63.142-51.475c6.618-5.393,16.046-5.662,22.963-0.641l113.887,82.685
c7.841,5.699,18.949,1.402,20.917-8.072l83.428-401.305C503.668,47.715,493.499,39.082,483.643,42.893z M395.044,136.412
L221.27,297.943c-6.108,5.686-10.048,13.295-11.164,21.553l-5.92,43.868c-0.784,5.858-9.012,6.439-10.628,0.77l-22.766-79.994
c-2.608-9.124,1.192-18.87,9.263-23.851l210.561-129.684C394.4,128.281,398.293,133.398,395.044,136.412z"/>
<g>
<path style="fill:#A0A0A1;" d="M405.003,480.205c-4.892,0-9.726-1.533-13.823-4.511l-113.882-82.681
c-3.166-2.299-7.496-2.178-10.528,0.295l-63.14,51.473c-6.056,4.953-14.159,6.566-21.66,4.31
c-7.506-2.258-13.377-8.077-15.703-15.566l-42.359-136.225L15.317,256.77C6.056,253.299,0.048,244.678,0,234.804
c-0.047-9.865,5.873-18.534,15.08-22.085L479.972,33.377c8.041-3.106,17.12-1.571,23.698,4.005
c6.587,5.584,9.589,14.303,7.838,22.755L428.08,461.446c-1.63,7.85-7.073,14.268-14.56,17.163
C410.753,479.679,407.868,480.205,405.003,480.205z M272.231,370.973c5.976,0,11.962,1.835,17.052,5.531l113.887,82.685
c1.212,0.881,2.397,0.624,2.997,0.393c0.596-0.23,1.64-0.833,1.942-2.284L491.536,55.99c0.33-1.592-0.519-2.593-1.054-3.047
c-0.531-0.451-1.648-1.121-3.159-0.538c-0.003,0.001-0.006,0.002-0.008,0.003L22.423,231.751c-1.68,0.648-2.028,1.964-2.023,2.955
c0.005,0.999,0.366,2.321,2.062,2.957l113.265,42.275c2.956,1.104,5.235,3.514,6.173,6.527l43.845,141.006
c0.434,1.396,1.501,1.906,2.099,2.086c0.595,0.178,1.761,0.343,2.885-0.577l63.154-51.485
C259.204,373.158,265.712,370.973,272.231,370.973z M198.75,378.286c-6.985,0-13.054-4.534-14.999-11.355l-22.768-80
c-3.839-13.438,1.8-27.967,13.716-35.323l210.569-129.69c6.121-3.759,13.996-2.284,18.329,3.425
c4.328,5.702,3.633,13.675-1.618,18.545L228.214,305.413c-4.359,4.058-7.204,9.548-8.001,15.45l-5.92,43.866
c-0.992,7.412-6.901,12.974-14.367,13.515C199.532,378.272,199.139,378.286,198.75,378.286z M339.662,173.966l-154.258,95.007
c-4.17,2.573-6.148,7.661-4.805,12.365l16.527,58.072l2.871-21.278c1.428-10.566,6.515-20.387,14.323-27.655L339.662,173.966z"/>
<path style="fill:#A0A0A1;" d="M423.776,279.45c-0.717,0-1.444-0.075-2.174-0.234c-5.505-1.195-8.999-6.627-7.804-12.131l1.55-7.14
c1.195-5.505,6.626-9,12.131-7.804c5.505,1.195,8.999,6.627,7.804,12.131l-1.55,7.14
C432.697,276.188,428.471,279.45,423.776,279.45z"/>
<path style="fill:#A0A0A1;" d="M391.668,427.341c-0.717,0-1.444-0.075-2.174-0.234c-5.504-1.195-8.998-6.627-7.803-12.131
l23.459-108.051c1.194-5.505,6.62-8.999,12.132-7.804c5.504,1.195,8.998,6.627,7.803,12.131l-23.459,108.051
C400.588,424.08,396.363,427.341,391.668,427.341z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-twitter-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-twitter-icon">Twitter icon</title>
<path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 916 B

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-vk-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-vk-icon">VK icon</title><path d="M15.684 0H8.316C1.592 0 0 1.592 0 8.316v7.368C0 22.408 1.592 24 8.316 24h7.368C22.408 24 24 22.408 24 15.684V8.316C24 1.592 22.408 0 15.684 0zm3.692 17.123h-1.744c-.66 0-.864-.525-2.05-1.727-1.033-1-1.49-1.135-1.744-1.135-.356 0-.458.102-.458.593v1.575c0 .424-.135.678-1.253.678-1.846 0-3.896-1.12-5.337-3.202C4.49 10.901 4 8.654 4 8.206c0-.254.102-.491.593-.491h1.744c.44 0 .61.203.78.677.864 2.49 2.303 4.675 2.896 4.675.22 0 .322-.102.322-.66V9.721c-.068-1.186-.695-1.287-.695-1.71 0-.204.17-.407.44-.407h2.744c.373 0 .508.203.508.643v3.473c0 .372.17.508.271.508.22 0 .407-.136.813-.542 1.253-1.406 2.15-3.574 2.15-3.574.119-.254.322-.491.762-.491h1.744c.525 0 .644.27.525.643-.22 1.017-2.354 4.031-2.354 4.031-.186.305-.254.44 0 .78.186.254.796.779 1.203 1.253.745.847 1.32 1.558 1.473 2.05.17.49-.085.745-.576.745z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Xing icon</title><path d="M18.188 0c-.517 0-.741.325-.927.66 0 0-7.455 13.224-7.702 13.657.015.024 4.919 9.023 4.919 9.023.17.308.436.66.967.66h3.454c.211 0 .375-.078.463-.22.089-.151.089-.346-.009-.536l-4.879-8.916c-.004-.006-.004-.016 0-.022L22.139.756c.095-.191.097-.387.006-.535C22.056.078 21.894 0 21.686 0h-3.498zM3.648 4.74c-.211 0-.385.074-.473.216-.09.149-.078.339.02.531l2.34 4.05c.004.01.004.016 0 .021L1.86 16.051c-.099.188-.093.381 0 .529.085.142.239.234.45.234h3.461c.518 0 .766-.348.945-.667l3.734-6.609-2.378-4.155c-.172-.315-.434-.659-.962-.659H3.648v.016z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 701 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-youtube-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-youtube-icon">Youtube icon</title>
<path fill="currentColor" d="M23.498 6.186a3.02 3.02 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.02 3.02 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.02 3.02 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.02 3.02 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12z" style="fill: rgba(255, 255, 255, 0.5)"/>
</svg>

After

Width:  |  Height:  |  Size: 621 B

+81
View File
@@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="<?php echo Theme::lang() ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Bludit">
<meta name="theme-color" content="#1d1d1f">
<!-- Dynamic title tag -->
<?php echo Theme::metaTagTitle(); ?>
<!-- Dynamic description tag -->
<?php echo Theme::metaTagDescription(); ?>
<!-- Include Favicon -->
<?php echo Theme::favicon('img/favicon.png'); ?>
<link rel="apple-touch-icon" href="<?php echo DOMAIN_THEME_IMG . 'favicon.png'; ?>">
<!-- Include CSS Bootstrap file from Bludit Core -->
<?php echo Theme::cssBootstrap(); ?>
<!-- Include CSS Bootstrap ICONS file from Bludit Core -->
<?php echo Theme::cssBootstrapIcons(); ?>
<!-- Include CSS Styles from this theme -->
<?php echo Theme::css('css/style.css'); ?>
<?php if ($themePlugin->googleFonts()) : ?>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:sans,bold">
<style>
body {
font-family: "Open Sans", sans-serif;
}
</style>
<?php endif; ?>
<!-- Load Bludit Plugins: Site head -->
<?php Theme::plugins('siteHead'); ?>
</head>
<body>
<!-- Skip to main content link for accessibility -->
<a class="skip-link sr-only sr-only-focusable" href="#main-content"><?php echo $L->get('Skip to main content'); ?></a>
<!-- Load Bludit Plugins: Site Body Begin -->
<?php Theme::plugins('siteBodyBegin'); ?>
<!-- Navbar -->
<?php include(THEME_DIR_PHP . 'navbar.php'); ?>
<!-- Content -->
<div id="main-content">
<?php
// $WHERE_AM_I variable detect where the user is browsing
// If the user is watching a particular page the variable takes the value "page"
// If the user is watching the frontpage the variable takes the value "home"
if ($WHERE_AM_I == 'page') {
include(THEME_DIR_PHP . 'page.php');
} else {
include(THEME_DIR_PHP . 'home.php');
}
?>
</div>
<!-- Footer -->
<?php include(THEME_DIR_PHP . 'footer.php'); ?>
<!-- Include Jquery file from Bludit Core -->
<?php echo Theme::jquery(); ?>
<!-- Include javascript Bootstrap file from Bludit Core -->
<?php echo Theme::jsBootstrap(); ?>
<!-- Load Bludit Plugins: Site Body End -->
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
+15
View File
@@ -0,0 +1,15 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
// Check if the Alternative plugin is active
if ($themePlugin === false || $themePlugin === null) {
// Display a user-friendly error message
$errorMessage = 'To ensure proper functionality, the theme requires the Alternative plugin. ';
$errorMessage .= 'Please activate the plugin through the admin panel.';
// If in admin area, show link to plugins
if (defined('ADMIN_CONTROLLER')) {
$errorMessage .= ' <a href="' . DOMAIN_ADMIN . 'plugins">Go to Plugins</a>';
}
exit('<div style="font-family: sans-serif; padding: 20px; background: #fff3cd; border: 1px solid #ffc107; border-radius: 4px; margin: 20px; color: #856404;">' . $errorMessage . '</div>');
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Einfaches und elegantes Theme für Websites und Blogs. Navigationsleiste mit statischen Seiten und Social Media Icons."
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Einfaches und elegantes Theme für Websites und Blogs. Navigationsleiste mit statischen Seiten und Social Media Icons."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Simple and elegant theme for websites or blogs. Navbar with social media and static pages."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Tema sencillo y elegante para sitios webs o blogs. Barra de navegación con redes sociales y páginas estáticas."
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "قالبی ساده و ظریف برای ساخت وبسایت و یا وبلاگ. نوار ناوبری به همراه رسانه های اجتماعی و صفحات استاتیک."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Tema elegante e semplice per siti web e blog. Barra di navigazione con social media e pagine statiche."
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "ウェブサイトやブログ向けのシンプルでエレガントなテーマ。ソーシャルメディアと固定ページへリンクするNavbarを備えています。"
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Simpel en elegant thema voor websites of blogs. Navigatiebalk met social media en statische pagina's."
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Простая и элегантная тема, отлично подходящая для веб-сайтов или блогов. Тема имеет боковую колонку с ссылками на социальные сети и списком статических страниц."
}
}
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "Web siteleri veya bloglar için basit ve zarif bir tema. Sosyal medya ve sabit sayfalarla kenar çubuğu."
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"author": "Bludit",
"email": "",
"website": "https://themes.bludit.com",
"version": "3.22.0",
"releaseDate": "2026-05-10",
"license": "MIT",
"compatible": "3.22",
"notes": "Improved accessibility, SEO with Schema.org, responsive design, and performance",
"plugin": "alternative"
}
+15
View File
@@ -0,0 +1,15 @@
<footer class="footer bg-dark" role="contentinfo">
<div class="container">
<div class="d-flex flex-column flex-md-row justify-content-center align-items-center text-center text-white text-uppercase">
<?php if (defined('BLUDIT_PRO')): ?>
<span><?php echo $site->footer(); ?></span>
<?php else: ?>
<span class="mb-2 mb-md-0"><?php echo $site->footer(); ?></span>
<span class="ml-md-4 text-warning">
<img class="mini-logo" src="<?php echo DOMAIN_THEME_IMG.'favicon.png'; ?>" alt="Bludit logo" loading="lazy" />
Powered by <a target="_blank" rel="noopener noreferrer" class="text-white" href="https://www.bludit.com">BLUDIT</a>
</span>
<?php endif; ?>
</div>
</div>
</footer>
+167
View File
@@ -0,0 +1,167 @@
<!-- Hero Section -->
<header class="hero" role="banner">
<div class="container">
<div class="hero-content">
<!-- Site slogan as main headline (hidden during search) -->
<?php if ($WHERE_AM_I !== 'search') : ?>
<h1 class="hero-title"><?php echo $site->slogan(); ?></h1>
<!-- Site description -->
<?php if ($site->description()) : ?>
<p class="hero-subtitle"><?php echo $site->description(); ?></p>
<?php endif ?>
<?php endif ?>
<!-- Custom search form if the plugin "search" is enabled -->
<?php
if (pluginActivated('pluginSearch')) {
$searchPlugin = getPlugin('pluginSearch');
$showSearchBox = true;
if ($WHERE_AM_I === 'search' && $searchPlugin->getResultCount() === 0) {
$showSearchBox = false;
}
if ($showSearchBox) : ?>
<div class="hero-search">
<form class="search-form" role="search" onsubmit="return searchNow();">
<label for="search-input" class="sr-only"><?php $language->p('Search') ?></label>
<div class="search-input-wrapper">
<svg class="search-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
<circle cx="11" cy="11" r="8"></circle>
<path d="M21 21l-4.35-4.35"></path>
</svg>
<input id="search-input" class="form-control" type="search" placeholder="<?php $language->p('Search') ?>" aria-label="<?php $language->p('Search') ?>" value="<?php echo ($WHERE_AM_I==='search'?htmlspecialchars($searchPlugin->getSearchTerm(), ENT_QUOTES, 'UTF-8'):'') ?>">
</div>
</form>
</div>
<?php endif;
}
?>
<?php if (pluginActivated('pluginSearch')) : ?>
<script>
function searchNow() {
var searchValue = document.getElementById("search-input").value.trim();
if (searchValue.length === 0) {
return false;
}
var searchURL = "<?php echo Theme::siteUrl(); ?>search/";
window.location.href = searchURL + encodeURIComponent(searchValue);
return false;
}
</script>
<?php endif ?>
</div>
</div>
</header>
<!-- Main content area -->
<main role="main">
<?php if (empty($content)) : ?>
<div class="text-center p-4">
<p class="text-muted"><?php $language->p('No pages found') ?></p>
</div>
<?php endif ?>
<!-- Print all the content -->
<?php foreach ($content as $page) : ?>
<article class="home-page" itemscope itemtype="https://schema.org/Article">
<!-- Hidden SEO metadata for each article -->
<div class="d-none" aria-hidden="true">
<meta itemprop="mainEntityOfPage" content="<?php echo $page->permalink(); ?>" />
<?php if ($page->coverImage()): ?>
<meta itemprop="image" content="<?php echo $page->coverImage(); ?>" />
<?php endif; ?>
<span itemprop="author" itemscope itemtype="https://schema.org/Person">
<meta itemprop="name" content="<?php echo $page->user('nickname'); ?>" />
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="<?php echo $site->title(); ?>" />
<span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
<meta itemprop="url" content="<?php echo DOMAIN_THEME_IMG . 'favicon.png'; ?>" />
</span>
</span>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<!-- Page title -->
<header>
<h2 class="title" itemprop="headline">
<a class="text-dark" href="<?php echo $page->permalink(); ?>" itemprop="url"><?php echo $page->title(); ?></a>
</h2>
</header>
<!-- Page description -->
<?php if ($page->description()) : ?>
<p class="page-description" itemprop="description"><?php echo $page->description(); ?></p>
<?php endif ?>
<!-- Page content until the pagebreak -->
<div class="page-excerpt" itemprop="articleBody">
<?php echo $page->contentBreak(); ?>
</div>
<!-- Shows "read more" button if necessary -->
<?php if ($page->readMore()) : ?>
<div class="text-right pt-3">
<a class="btn btn-primary btn-sm" href="<?php echo $page->permalink(); ?>" role="button" aria-label="<?php echo $L->get('Read more'); ?> - <?php echo $page->title(); ?>"><?php echo $L->get('Read more'); ?></a>
</div>
<?php endif ?>
<!-- Page date -->
<footer class="mt-3 article-footer">
<?php if ($themePlugin->dateFormat() == 'relative') : ?>
<small class="text-muted"><time datetime="<?php echo $page->dateRaw('c'); ?>" itemprop="datePublished"><?php echo $page->relativeTime() ?></time></small>
<?php elseif ($themePlugin->dateFormat() == 'absolute') : ?>
<small class="text-muted"><time datetime="<?php echo $page->dateRaw('c'); ?>" itemprop="datePublished"><?php echo $page->date() ?></time></small>
<?php endif ?>
<?php if ($page->dateModified()): ?>
<meta itemprop="dateModified" content="<?php echo $page->dateModified('c'); ?>" />
<?php else: ?>
<meta itemprop="dateModified" content="<?php echo $page->dateRaw('c'); ?>" />
<?php endif; ?>
</footer>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</div>
</div>
</div>
</article>
<?php endforeach ?>
</main>
<!-- Pagination -->
<?php if (Paginator::numberOfPages() > 1) : ?>
<nav class="paginator" aria-label="<?php echo $L->get('Page navigation'); ?>">
<ul class="pagination flex-wrap justify-content-center">
<!-- Previous button -->
<?php if (Paginator::showPrev()) : ?>
<li class="page-item mr-2">
<a class="page-link" href="<?php echo htmlspecialchars(Paginator::previousPageUrl(), ENT_QUOTES, 'UTF-8') ?>" rel="prev" aria-label="<?php echo $L->get('Previous'); ?>">
<span aria-hidden="true">&#9664;</span> <?php echo $L->get('Previous'); ?>
</a>
</li>
<?php endif; ?>
<!-- Home button -->
<li class="page-item <?php if (Paginator::currentPage() == 1) echo 'disabled' ?>" aria-current="<?php echo (Paginator::currentPage() == 1) ? 'page' : 'false'; ?>">
<a class="page-link" href="<?php echo Theme::siteUrl() ?>"><?php echo $L->get('Home'); ?></a>
</li>
<!-- Next button -->
<?php if (Paginator::showNext()) : ?>
<li class="page-item ml-2">
<a class="page-link" href="<?php echo htmlspecialchars(Paginator::nextPageUrl(), ENT_QUOTES, 'UTF-8') ?>" rel="next" aria-label="<?php echo $L->get('Next'); ?>">
<?php echo $L->get('Next'); ?> <span aria-hidden="true">&#9658;</span>
</a>
</li>
<?php endif; ?>
</ul>
</nav>
<?php endif ?>
+60
View File
@@ -0,0 +1,60 @@
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark text-uppercase" role="navigation" aria-label="Main navigation">
<div class="container">
<a class="navbar-brand" href="<?php echo Theme::siteUrl(); ?>">
<span class="text-white"><?php echo $site->title(); ?></span>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="<?php echo $L->get('Toggle navigation'); ?>">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<!-- Blog link (when homepage is set to a static page) -->
<?php if ($site->homepage()): ?>
<li class="nav-item<?php echo ($WHERE_AM_I === 'blog') ? ' active' : ''; ?>">
<a class="nav-link" href="<?php echo DOMAIN_BASE . ltrim($url->filters('blog'), '/') ?>">
<?php echo $L->get('Blog') ?>
</a>
</li>
<?php endif; ?>
<!-- Static pages -->
<?php foreach ($staticContent as $staticPage): ?>
<li class="nav-item<?php echo ($page && $page->key() === $staticPage->key()) ? ' active' : ''; ?>">
<a class="nav-link" href="<?php echo $staticPage->permalink(); ?>">
<?php echo $staticPage->title(); ?>
<?php if ($page && $page->key() === $staticPage->key()): ?>
<span class="sr-only">(<?php echo $L->get('current'); ?>)</span>
<?php endif; ?>
</a>
</li>
<?php endforeach ?>
<!-- Social Networks -->
<?php foreach (Theme::socialNetworks() as $key=>$label): ?>
<li class="nav-item">
<a class="nav-link" href="<?php echo $site->{$key}(); ?>" target="_blank" rel="noopener noreferrer" title="<?php echo $label; ?>">
<img class="d-none d-md-inline-block nav-svg-icon" src="<?php echo DOMAIN_THEME.'img/'.$key.'.svg' ?>" alt="" aria-hidden="true" />
<span class="d-inline d-md-none"><?php echo $label; ?></span>
<span class="sr-only d-none d-md-inline"><?php echo $label; ?></span>
</a>
</li>
<?php endforeach; ?>
<!-- RSS -->
<?php if (Theme::rssUrl()): ?>
<li class="nav-item">
<a class="nav-link" href="<?php echo Theme::rssUrl() ?>" target="_blank" rel="noopener noreferrer" title="RSS Feed">
<img class="d-none d-md-inline-block nav-svg-icon" src="<?php echo DOMAIN_THEME.'img/rss.svg' ?>" alt="" aria-hidden="true" />
<span class="d-inline d-md-none">RSS</span>
<span class="sr-only d-none d-md-inline">RSS Feed</span>
</a>
</li>
<?php endif; ?>
</ul>
</div>
</div>
</nav>
+102
View File
@@ -0,0 +1,102 @@
<!-- Breadcrumb Navigation for SEO -->
<nav class="breadcrumb-nav" aria-label="<?php echo $L->get('Breadcrumb'); ?>">
<div class="container">
<ol class="breadcrumb bg-transparent p-0 mb-0" itemscope itemtype="https://schema.org/BreadcrumbList">
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="<?php echo Theme::siteUrl(); ?>" itemprop="item">
<span itemprop="name"><?php echo $L->get('Home'); ?></span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item active" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" aria-current="page">
<span itemprop="name"><?php echo $page->title(); ?></span>
<meta itemprop="item" content="<?php echo $page->permalink(); ?>" />
<meta itemprop="position" content="2" />
</li>
</ol>
</div>
</nav>
<article class="page" itemscope itemtype="https://schema.org/Article">
<!-- Hidden SEO metadata -->
<div class="d-none" aria-hidden="true">
<meta itemprop="mainEntityOfPage" content="<?php echo $page->permalink(); ?>" />
<?php if ($page->dateModified()): ?>
<meta itemprop="dateModified" content="<?php echo $page->dateModified('c'); ?>" />
<?php endif; ?>
<meta itemprop="wordCount" content="<?php echo str_word_count(strip_tags($page->content())); ?>" />
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="<?php echo $site->title(); ?>" />
<span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
<meta itemprop="url" content="<?php echo DOMAIN_THEME_IMG . 'favicon.png'; ?>" />
</span>
</span>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<!-- Page header -->
<header class="page-header mb-4">
<!-- Page title -->
<h1 class="title" itemprop="headline"><?php echo $page->title(); ?></h1>
<?php if (!$page->isStatic() && !$url->notFound() && $themePlugin->showPostInformation()) : ?>
<div class="page-meta text-muted mb-3">
<!-- Page creation time -->
<span class="pr-3">
<i class="bi bi-calendar" aria-hidden="true"></i>
<time datetime="<?php echo $page->dateRaw('c'); ?>" itemprop="datePublished"><?php echo $page->date() ?></time>
</span>
<?php if ($page->dateModified() && $page->dateModified() !== $page->date()): ?>
<!-- Last modified -->
<span class="pr-3">
<i class="bi bi-pencil" aria-hidden="true"></i>
<time datetime="<?php echo $page->dateModified('c'); ?>"><?php echo $L->get('Updated'); ?>: <?php echo $page->dateModified(); ?></time>
</span>
<?php endif; ?>
<!-- Page reading time -->
<span class="pr-3">
<i class="bi bi-clock" aria-hidden="true"></i>
<span><?php echo $page->readingTime() . ' ' . $L->get('minutes') . ' ' . $L->g('read') ?></span>
</span>
<!-- Page author -->
<span itemprop="author" itemscope itemtype="https://schema.org/Person">
<i class="bi bi-person" aria-hidden="true"></i>
<a href="<?php echo Theme::siteUrl(); ?>" rel="author" itemprop="url">
<span itemprop="name"><?php echo $page->user('nickname') ?></span>
</a>
</span>
</div>
<?php endif ?>
<!-- Page description -->
<?php if ($page->description()) : ?>
<p class="page-description lead" itemprop="description"><?php echo $page->description(); ?></p>
<?php endif ?>
</header>
<!-- Page cover image -->
<?php if ($page->coverImage()) : ?>
<figure class="page-cover-image-wrapper mb-4">
<img class="page-cover-image img-fluid rounded" src="<?php echo $page->coverImage(); ?>" alt="<?php echo $page->title(); ?>" loading="lazy" itemprop="image" />
</figure>
<?php endif ?>
<!-- Page content -->
<div class="page-content" itemprop="articleBody">
<?php echo $page->content(); ?>
</div>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</div>
</div>
</div>
</article>
+596
View File
@@ -0,0 +1,596 @@
/* ========================================
CSS CUSTOM PROPERTIES - Light Mode (Default)
======================================== */
:root {
/* Neutral Monochrome Colors */
--primary: #2c2c2c;
--primary-dark: #1e1e1e;
--primary-darker: #111111;
--primary-gradient: #2c2c2c;
--primary-gradient-hover: #1e1e1e;
/* Neutral Colors */
--text-primary: #333333;
--text-secondary: #6c757d;
--text-muted: #adb5bd;
--bg-body: #ffffff;
--bg-card: #ffffff;
--bg-hover: #f8f9fa;
--border-color: #e9ecef;
--border-subtle: #dee2e6;
/* Shadows */
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
--shadow-md: 0 4px 16px rgba(0, 0, 0, 0.12);
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.15);
--shadow-hover: 0 6px 20px rgba(0, 0, 0, 0.2);
/* Spacing Scale */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 1.5rem;
--space-lg: 2rem;
--space-xl: 3rem;
/* Border Radius */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
/* Typography */
--font-size-base: 1rem;
--font-size-sm: 0.875rem;
--font-size-xs: 0.75rem;
--font-size-lg: 1.125rem;
--font-size-xl: 1.25rem;
--line-height-base: 1.6;
/* Code Blocks */
--code-bg: #f8f9fa;
--code-text: #333;
--code-border: #e9ecef;
}
/* ========================================
BASE STYLES
======================================== */
html {
position: relative;
min-height: 100%;
scroll-behavior: smooth;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
padding-top: 42px;
margin-bottom: 42px;
background-color: var(--bg-body);
color: var(--text-primary);
transition: background-color 0.3s ease, color 0.3s ease;
font-size: var(--font-size-base);
line-height: var(--line-height-base);
}
section {
padding: 150px 0;
}
img {
max-width: 100%;
height: auto;
}
/* ========================================
FORM INPUTS
======================================== */
input,
textarea,
select,
.form-control {
background-color: #ffffff !important;
color: var(--text-primary) !important;
border-color: var(--border-color);
}
/* ========================================
LINKS
======================================== */
a {
color: var(--primary);
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: var(--primary-dark);
text-decoration: none;
}
a:focus {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
/* ========================================
TYPOGRAPHY
======================================== */
h1.title,
h2.title {
font-size: 2.3rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: var(--space-md);
}
/* ========================================
CODE BLOCKS
======================================== */
pre,
code {
background: var(--code-bg);
color: var(--code-text);
border-radius: var(--radius-sm);
transition: background-color 0.3s ease, color 0.3s ease;
}
pre {
border-left: 3px solid var(--primary);
padding: var(--space-md);
overflow-x: auto;
}
code {
display: inline-block;
padding: 0.2em 0.5em;
line-height: 1.4em;
font-size: 0.9em;
}
/* ========================================
TABLES
======================================== */
table {
empty-cells: show;
border: 1px solid var(--border-color);
width: 100%;
font-size: 0.9em;
margin-bottom: var(--space-md);
border-radius: var(--radius-sm);
overflow: hidden;
}
thead {
background: var(--primary);
color: #ffffff;
text-align: left;
vertical-align: bottom;
}
tr {
display: table-row;
vertical-align: inherit;
border-color: var(--border-color);
transition: background-color 0.2s ease;
}
tbody tr:hover {
background-color: var(--bg-hover);
}
th,
td {
padding: 0.75em 1em;
border-bottom: 1px solid var(--border-color);
}
/* ========================================
BLOCKQUOTES
======================================== */
blockquote {
padding: var(--space-md) var(--space-lg);
margin: 0 0 var(--space-lg) var(--space-lg);
border-left: 4px solid var(--primary);
font-style: italic;
background-color: var(--bg-hover);
border-radius: var(--radius-sm);
color: var(--text-secondary);
}
/* ========================================
NAVBAR
======================================== */
.navbar-modern {
background: var(--primary) !important;
box-shadow: var(--shadow-md);
transition: all 0.3s ease;
padding-top: 0.25rem;
padding-bottom: 0.25rem;
min-height: 42px;
}
.navbar-brand {
font-weight: 600;
font-size: 1rem;
transition: transform 0.3s ease;
}
.navbar-brand:hover {
transform: translateY(-2px);
}
.navbar .nav-link {
font-size: 0.825rem;
font-weight: 500;
color: rgba(255, 255, 255, 0.9) !important;
padding: 0.3rem 0.75rem;
border-radius: var(--radius-sm);
transition: all 0.3s ease;
}
.navbar .nav-link:hover {
background-color: rgba(255, 255, 255, 0.15);
color: #ffffff !important;
}
.navbar .nav-link.active {
background-color: rgba(255, 255, 255, 0.2);
color: #ffffff !important;
}
img.nav-svg-icon {
width: 1.2rem;
height: 1.2rem;
filter: brightness(0) invert(1);
opacity: 0.9;
transition: opacity 0.3s ease;
}
.nav-link:hover img.nav-svg-icon {
opacity: 1;
}
/* ========================================
CARDS - Modern Design
======================================== */
.card-modern {
background: transparent;
border: none;
border-bottom: 1px solid var(--border-color);
padding-bottom: var(--space-xl);
margin-bottom: var(--space-xl);
}
.card-modern .card-img-top {
border-radius: var(--radius-sm);
}
.card-modern .card-body {
padding: 0;
margin-top: var(--space-md);
}
.card-modern .title {
color: var(--text-primary);
}
/* ========================================
BUTTONS
======================================== */
.btn-primary-gradient {
background: var(--primary);
border: none;
color: white;
padding: 0.75rem 1.5rem;
border-radius: var(--radius-sm);
font-weight: 600;
font-size: var(--font-size-base);
transition: all 0.3s ease;
box-shadow: var(--shadow-sm);
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.btn-primary-gradient:hover {
background: var(--primary-dark);
box-shadow: var(--shadow-hover);
transform: translateY(-2px);
color: white;
text-decoration: none;
}
.btn-primary-gradient:focus {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
.btn-outline-primary-custom {
border: 2px solid var(--primary);
color: var(--primary);
background: transparent;
padding: 0.6rem 1.5rem;
border-radius: var(--radius-sm);
font-weight: 600;
transition: all 0.3s ease;
}
.btn-outline-primary-custom:hover {
background: var(--primary);
color: white;
transform: translateY(-2px);
}
/* ========================================
FOOTER
======================================== */
footer.footer-modern {
position: absolute;
bottom: 0;
width: 100%;
min-height: 42px;
line-height: 1.5;
background: var(--primary);
color: white;
padding: 0.6rem 0;
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.1);
font-size: var(--font-size-xs);
}
footer.footer-modern a {
color: rgba(255, 255, 255, 0.9);
transition: color 0.3s ease;
}
footer.footer-modern a:hover {
color: #ffffff;
}
.mini-logo {
height: 24px;
vertical-align: middle;
filter: brightness(0) invert(1);
}
/* ========================================
METADATA (Dates, Reading Time)
======================================== */
.metadata {
color: var(--text-secondary);
font-size: var(--font-size-sm);
display: flex;
flex-wrap: wrap;
gap: var(--space-md);
align-items: center;
}
.metadata i {
color: var(--text-secondary);
margin-right: 0.25rem;
}
/* ========================================
PAGINATION
======================================== */
.pagination .page-link {
background: var(--bg-card);
border: 1px solid var(--border-color);
color: var(--primary);
padding: 0.6rem 1.2rem;
border-radius: var(--radius-sm);
font-weight: 500;
transition: all 0.3s ease;
}
.pagination .page-link:hover {
background: var(--primary);
color: white;
border-color: var(--primary);
transform: translateY(-2px);
box-shadow: var(--shadow-sm);
}
.pagination .page-item.disabled .page-link {
background: var(--bg-hover);
color: var(--text-muted);
border-color: var(--border-color);
}
/* ========================================
PLUGINS - Sidebar Styling
======================================== */
.sidebar-container {
margin-top: var(--space-lg);
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-lg);
font-size: 0.875rem; /* 14px */
}
.plugin {
margin-top: 0;
padding-bottom: var(--space-lg);
margin-bottom: var(--space-lg);
border-bottom: 1px solid var(--border-subtle);
}
.plugin:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.plugin-label {
font-size: var(--font-size-base);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--primary);
margin-bottom: var(--space-md);
}
.plugin ul {
list-style: none;
padding: 0;
margin: 0;
}
.plugin ul li {
padding: var(--space-xs) 0;
}
.plugin ul li a {
color: var(--text-primary);
display: block;
transition: color 0.3s ease;
}
.plugin ul li a:hover {
color: var(--primary);
}
/* Tags and Categories - Badge Style */
.plugin.plugin-tags li,
.plugin.plugin-categories li {
display: inline-block;
padding: 0;
margin: 0.25rem;
}
.plugin.plugin-tags li a,
.plugin.plugin-categories li a {
background: var(--primary);
color: white;
padding: 0.4rem 1rem;
border-radius: 20px;
font-size: var(--font-size-sm);
font-weight: 500;
display: inline-block;
transition: all 0.3s ease;
}
.plugin.plugin-tags li a:hover,
.plugin.plugin-categories li a:hover {
background: var(--primary-dark);
color: white;
}
/* Search Plugin Styling */
.plugin.plugin-search .form-control {
border: 2px solid var(--border-color);
border-radius: var(--radius-sm);
padding: 0.75rem 1rem;
background: var(--bg-body);
color: var(--text-primary);
transition: all 0.3s ease;
}
.plugin.plugin-search .form-control:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);
outline: none;
}
.plugin.plugin-search button {
background: var(--primary);
border: none;
color: white;
padding: 0.75rem 1.5rem;
border-radius: var(--radius-sm);
font-weight: 600;
transition: all 0.3s ease;
margin-top: var(--space-sm);
}
.plugin.plugin-search button:hover {
background: var(--primary-dark);
transform: translateY(-2px);
box-shadow: var(--shadow-sm);
}
/* ========================================
BOOTSTRAP ICONS
======================================== */
.bi {
margin-right: 0.5rem;
}
/* ========================================
POST TAXONOMY (Tags & Categories)
======================================== */
.post-taxonomy {
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
align-items: center;
}
.taxonomy-badge {
display: inline-block;
padding: 0.3rem 0.75rem;
border-radius: 20px;
font-size: var(--font-size-xs);
font-weight: 500;
text-decoration: none;
transition: all 0.2s ease;
}
.taxonomy-category {
background: transparent;
color: var(--text-secondary);
border: 1px solid var(--border-color);
}
.taxonomy-category:hover {
background: var(--bg-hover);
color: var(--primary);
border-color: var(--primary);
}
.taxonomy-tag {
background: transparent;
color: var(--text-secondary);
border: 1px solid var(--border-color);
}
.taxonomy-tag:hover {
background: var(--bg-hover);
color: var(--primary);
border-color: var(--primary);
}
/* ========================================
COVER IMAGE ENHANCEMENTS
======================================== */
.cover-image-wrapper {
position: relative;
overflow: hidden;
border-radius: var(--radius-sm);
margin-bottom: var(--space-md);
}
/* ========================================
RESPONSIVE ADJUSTMENTS
======================================== */
@media (max-width: 768px) {
h1.title {
font-size: 1.8rem;
}
h2.title {
font-size: 1.5rem;
}
body {
font-size: 0.95rem;
}
.plugin {
padding: var(--space-md);
}
.btn-primary-gradient {
width: 100%;
justify-content: center;
}
}
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-bluesky-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-bluesky-icon">Bluesky icon</title>
<path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565C.139 1.908 0 3.08 0 3.768c0 .69.378 5.65.624 6.479c.815 2.736 3.713 3.66 6.383 3.364q.204-.03.415-.056q-.207.033-.415.056c-3.912.58-7.387 2.005-2.83 7.078c5.013 5.19 6.87-1.113 7.823-4.308c.953 3.195 2.05 9.271 7.733 4.308c4.267-4.308 1.172-6.498-2.74-7.078a9 9 0 0 1-.415-.056q.21.026.415.056c2.67.297 5.568-.628 6.383-3.364c.246-.828.624-5.79.624-6.478c0-.69-.139-1.861-.902-2.206c-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8" style="fill: rgba(255, 255, 255, 0.5)"/>
</svg>

After

Width:  |  Height:  |  Size: 799 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-codepen-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-codepen-icon">CodePen icon</title>
<path d="M24 8.182l-.018-.087-.017-.05c-.01-.024-.018-.05-.03-.075-.003-.018-.015-.034-.02-.05l-.035-.067-.03-.05-.044-.06-.046-.045-.06-.045-.046-.03-.06-.044-.044-.04-.015-.02L12.58.19c-.347-.232-.796-.232-1.142 0L.453 7.502l-.015.015-.044.035-.06.05-.038.04-.05.056-.037.045-.05.06c-.02.017-.03.03-.03.046l-.05.06-.02.06c-.02.01-.02.04-.03.07l-.01.05C0 8.12 0 8.15 0 8.18v7.497c0 .044.003.09.01.135l.01.046c.005.03.01.06.02.086l.015.05c.01.027.016.053.027.075l.022.05c0 .01.015.04.03.06l.03.04c.015.01.03.04.045.06l.03.04.04.04c.01.013.01.03.03.03l.06.042.04.03.01.014 10.97 7.33c.164.12.375.163.57.163s.39-.06.57-.18l10.99-7.28.014-.01.046-.037.06-.043.048-.036.052-.058.033-.045.04-.06.03-.05.03-.07.016-.052.03-.077.015-.045.03-.08v-7.5c0-.05 0-.095-.016-.14l-.014-.045.044.003zm-11.99 6.28l-3.65-2.44 3.65-2.442 3.65 2.44-3.65 2.44zm-1.034-6.674l-4.473 2.99L2.89 8.362l8.086-5.39V7.79zm-6.33 4.233l-2.582 1.73V10.3l2.582 1.726zm1.857 1.25l4.473 2.99v4.82L2.89 15.69l3.618-2.417v-.004zm6.537 2.99l4.474-2.98 3.613 2.42-8.087 5.39v-4.82zm6.33-4.23l2.583-1.72v3.456l-2.583-1.73zm-1.855-1.24L13.042 7.8V2.97l8.085 5.39-3.612 2.415v.003z" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-dribbble-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-dribbble-icon">Dribbble icon</title><path d="M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308 2.3-1.555 3.936-4.02 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.017-8.04 6.4 1.73 1.358 3.92 2.166 6.29 2.166 1.42 0 2.77-.29 4-.816zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.176zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702-1.81-1.61-4.19-2.586-6.795-2.586-.807 0-1.59.098-2.4.288zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04.24.49.47.985.68 1.486.08.18.15.36.22.53 3.41-.43 6.8.26 7.14.33-.02-2.42-.88-4.64-2.31-6.386z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-facebook-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-facebook-icon">Facebook icon</title>
<path d="M22.676 0H1.324C.593 0 0 .593 0 1.324v21.352C0 23.408.593 24 1.324 24h11.494v-9.294H9.689v-3.621h3.129V8.41c0-3.099 1.894-4.785 4.659-4.785 1.325 0 2.464.097 2.796.141v3.24h-1.921c-1.5 0-1.792.721-1.792 1.771v2.311h3.584l-.465 3.63H16.56V24h6.115c.733 0 1.325-.592 1.325-1.324V1.324C24 .593 23.408 0 22.676 0" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-github-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-github-icon">GitHub icon</title>
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 984 B

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitLab icon</title><path d="M23.955 13.587l-1.342-4.135-2.664-8.189c-.135-.423-.73-.423-.867 0L16.418 9.45H7.582L4.919 1.263C4.783.84 4.185.84 4.05 1.26L1.386 9.449.044 13.587c-.121.375.014.789.331 1.023L12 23.054l11.625-8.443c.318-.235.453-.647.33-1.024" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 381 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-googleplus-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-googleplus-icon">Google+ icon</title>
<path d="M7.635 10.909v2.619h4.335c-.173 1.125-1.31 3.295-4.331 3.295-2.604 0-4.731-2.16-4.731-4.823 0-2.662 2.122-4.822 4.728-4.822 1.485 0 2.479.633 3.045 1.178l2.073-1.994c-1.33-1.245-3.056-1.995-5.115-1.995C3.412 4.365 0 7.785 0 12s3.414 7.635 7.635 7.635c4.41 0 7.332-3.098 7.332-7.461 0-.501-.054-.885-.12-1.265H7.635zm16.365 0h-2.183V8.726h-2.183v2.183h-2.182v2.181h2.184v2.184h2.189V13.09H24" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 671 B

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-instagram-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-instagram-icon">Instagram icon</title><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-linkedin-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-linkedin-icon">LinkedIn icon</title>
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" style="fill: rgb(154, 157, 160);"/>
</svg>

After

Width:  |  Height:  |  Size: 770 B

+1
View File
@@ -0,0 +1 @@
<svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>Mastodon icon</title><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1019 B

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-rss-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-rss-icon">RSS icon</title><path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/></svg>

After

Width:  |  Height:  |  Size: 470 B

+32
View File
@@ -0,0 +1,32 @@
<svg height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512" xml:space="preserve">
<path style="fill:#E1E1E3;" d="M483.643,42.893L18.751,222.234c-11.472,4.424-11.372,20.667,0.133,24.978l113.278,42.279
l43.845,141.006c2.806,9.031,13.849,12.369,21.179,6.377l63.142-51.475c6.618-5.393,16.046-5.662,22.963-0.641l113.887,82.685
c7.841,5.699,18.949,1.402,20.917-8.072l83.428-401.305C503.668,47.715,493.499,39.082,483.643,42.893z M395.044,136.412
L221.27,297.943c-6.108,5.686-10.048,13.295-11.164,21.553l-5.92,43.868c-0.784,5.858-9.012,6.439-10.628,0.77l-22.766-79.994
c-2.608-9.124,1.192-18.87,9.263-23.851l210.561-129.684C394.4,128.281,398.293,133.398,395.044,136.412z"/>
<g>
<path style="fill:#A0A0A1;" d="M405.003,480.205c-4.892,0-9.726-1.533-13.823-4.511l-113.882-82.681
c-3.166-2.299-7.496-2.178-10.528,0.295l-63.14,51.473c-6.056,4.953-14.159,6.566-21.66,4.31
c-7.506-2.258-13.377-8.077-15.703-15.566l-42.359-136.225L15.317,256.77C6.056,253.299,0.048,244.678,0,234.804
c-0.047-9.865,5.873-18.534,15.08-22.085L479.972,33.377c8.041-3.106,17.12-1.571,23.698,4.005
c6.587,5.584,9.589,14.303,7.838,22.755L428.08,461.446c-1.63,7.85-7.073,14.268-14.56,17.163
C410.753,479.679,407.868,480.205,405.003,480.205z M272.231,370.973c5.976,0,11.962,1.835,17.052,5.531l113.887,82.685
c1.212,0.881,2.397,0.624,2.997,0.393c0.596-0.23,1.64-0.833,1.942-2.284L491.536,55.99c0.33-1.592-0.519-2.593-1.054-3.047
c-0.531-0.451-1.648-1.121-3.159-0.538c-0.003,0.001-0.006,0.002-0.008,0.003L22.423,231.751c-1.68,0.648-2.028,1.964-2.023,2.955
c0.005,0.999,0.366,2.321,2.062,2.957l113.265,42.275c2.956,1.104,5.235,3.514,6.173,6.527l43.845,141.006
c0.434,1.396,1.501,1.906,2.099,2.086c0.595,0.178,1.761,0.343,2.885-0.577l63.154-51.485
C259.204,373.158,265.712,370.973,272.231,370.973z M198.75,378.286c-6.985,0-13.054-4.534-14.999-11.355l-22.768-80
c-3.839-13.438,1.8-27.967,13.716-35.323l210.569-129.69c6.121-3.759,13.996-2.284,18.329,3.425
c4.328,5.702,3.633,13.675-1.618,18.545L228.214,305.413c-4.359,4.058-7.204,9.548-8.001,15.45l-5.92,43.866
c-0.992,7.412-6.901,12.974-14.367,13.515C199.532,378.272,199.139,378.286,198.75,378.286z M339.662,173.966l-154.258,95.007
c-4.17,2.573-6.148,7.661-4.805,12.365l16.527,58.072l2.871-21.278c1.428-10.566,6.515-20.387,14.323-27.655L339.662,173.966z"/>
<path style="fill:#A0A0A1;" d="M423.776,279.45c-0.717,0-1.444-0.075-2.174-0.234c-5.505-1.195-8.999-6.627-7.804-12.131l1.55-7.14
c1.195-5.505,6.626-9,12.131-7.804c5.505,1.195,8.999,6.627,7.804,12.131l-1.55,7.14
C432.697,276.188,428.471,279.45,423.776,279.45z"/>
<path style="fill:#A0A0A1;" d="M391.668,427.341c-0.717,0-1.444-0.075-2.174-0.234c-5.504-1.195-8.998-6.627-7.803-12.131
l23.459-108.051c1.194-5.505,6.62-8.999,12.132-7.804c5.504,1.195,8.998,6.627,7.803,12.131l-23.459,108.051
C400.588,424.08,396.363,427.341,391.668,427.341z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-twitter-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-twitter-icon">Twitter icon</title>
<path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z" style="fill: rgba(255, 255, 255, 0.5);"/>
</svg>

After

Width:  |  Height:  |  Size: 916 B

+1
View File
@@ -0,0 +1 @@
<svg aria-labelledby="simpleicons-vk-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title id="simpleicons-vk-icon">VK icon</title><path d="M15.684 0H8.316C1.592 0 0 1.592 0 8.316v7.368C0 22.408 1.592 24 8.316 24h7.368C22.408 24 24 22.408 24 15.684V8.316C24 1.592 22.408 0 15.684 0zm3.692 17.123h-1.744c-.66 0-.864-.525-2.05-1.727-1.033-1-1.49-1.135-1.744-1.135-.356 0-.458.102-.458.593v1.575c0 .424-.135.678-1.253.678-1.846 0-3.896-1.12-5.337-3.202C4.49 10.901 4 8.654 4 8.206c0-.254.102-.491.593-.491h1.744c.44 0 .61.203.78.677.864 2.49 2.303 4.675 2.896 4.675.22 0 .322-.102.322-.66V9.721c-.068-1.186-.695-1.287-.695-1.71 0-.204.17-.407.44-.407h2.744c.373 0 .508.203.508.643v3.473c0 .372.17.508.271.508.22 0 .407-.136.813-.542 1.253-1.406 2.15-3.574 2.15-3.574.119-.254.322-.491.762-.491h1.744c.525 0 .644.27.525.643-.22 1.017-2.354 4.031-2.354 4.031-.186.305-.254.44 0 .78.186.254.796.779 1.203 1.253.745.847 1.32 1.558 1.473 2.05.17.49-.085.745-.576.745z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Xing icon</title><path d="M18.188 0c-.517 0-.741.325-.927.66 0 0-7.455 13.224-7.702 13.657.015.024 4.919 9.023 4.919 9.023.17.308.436.66.967.66h3.454c.211 0 .375-.078.463-.22.089-.151.089-.346-.009-.536l-4.879-8.916c-.004-.006-.004-.016 0-.022L22.139.756c.095-.191.097-.387.006-.535C22.056.078 21.894 0 21.686 0h-3.498zM3.648 4.74c-.211 0-.385.074-.473.216-.09.149-.078.339.02.531l2.34 4.05c.004.01.004.016 0 .021L1.86 16.051c-.099.188-.093.381 0 .529.085.142.239.234.45.234h3.461c.518 0 .766-.348.945-.667l3.734-6.609-2.378-4.155c-.172-.315-.434-.659-.962-.659H3.648v.016z" style="fill: rgba(255, 255, 255, 0.5);"/></svg>

After

Width:  |  Height:  |  Size: 701 B

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg aria-labelledby="simpleicons-youtube-icon" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title id="simpleicons-youtube-icon">Youtube icon</title>
<path fill="currentColor" d="M23.498 6.186a3.02 3.02 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.02 3.02 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.02 3.02 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.02 3.02 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12z" style="fill: rgba(255, 255, 255, 0.5)"/>
</svg>

After

Width:  |  Height:  |  Size: 621 B

+60
View File
@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="<?php echo Theme::lang() ?>">
<head>
<?php include(THEME_DIR_PHP.'head.php'); ?>
</head>
<body>
<!-- Load Bludit Plugins: Site Body Begin -->
<?php Theme::plugins('siteBodyBegin'); ?>
<!-- Navbar -->
<?php include(THEME_DIR_PHP.'navbar.php'); ?>
<!-- Content -->
<div class="container">
<div class="row">
<!-- Blog Posts -->
<div class="col-md-8">
<?php
// Bludit content are pages
// But if you order the content by date
// These pages works as posts
// $WHERE_AM_I variable detect where the user is browsing
// If the user is watching a particular page/post the variable takes the value "page"
// If the user is watching the frontpage the variable takes the value "home"
if ($WHERE_AM_I == 'page') {
include(THEME_DIR_PHP.'page.php');
} else {
include(THEME_DIR_PHP.'home.php');
}
?>
</div>
<!-- Right Sidebar -->
<div class="col-md-3 offset-md-1">
<?php include(THEME_DIR_PHP.'sidebar.php'); ?>
</div>
</div>
</div>
<!-- Footer -->
<?php include(THEME_DIR_PHP.'footer.php'); ?>
<!-- Javascript -->
<?php
// Include Jquery file from Bludit Core
echo Theme::jquery();
// Include javascript Bootstrap file from Bludit Core
echo Theme::jsBootstrap();
?>
<!-- Load Bludit Plugins: Site Body End -->
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Theme für Blogs mit Navigatiationsleiste mit statischen Seiten und Social Media Icons, rechter Seitenleiste und Angabe der Lesezeit."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Theme für Blogs mit Navigatiationsleiste mit statischen Seiten und Social Media Icons, rechter Seitenleiste und Angabe der Lesezeit."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Theme for bloggers, with right sidebar, reading time and navbar with social icons and static pages."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Tema para bloggers, soporte para tiempo de lectura y barra de navegación con iconos sociales y páginas estáticas."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "قالبی برای وبلاگ نویس ها، به همراه نوار کناری، زمان مطالعه و نوار ناوبری به همراه آیکن های شبکه مجازی و صفحات استاتیک."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Tema per blogger, con barra laterale a destra, tempo di lettura e barra di navigazione con icone social e pagine statiche."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "ブロガー向けテーマ。右サイドバー、読了時間、ソーシャルアイコンと固定ページへリンクするnavbarを備えています。"
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Thema voor bloggers, met zijbalk rechts, leestijdindicatie en navigatiebalk met social media en statische pagina's."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Тема подходит для блогеров, с боковой панелью справа. Присутствует информация о пнримерном временем чтения материала, есть блок навигации со значками социальных сетей и списом статических страниц."
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Blog X",
"description": "Blog yazarları için tema, sağ kenar çubuğu ile birlikte. Okuma süresi, kenar çubuğunda sosyal simgeler ve sabit sayfalar."
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://themes.bludit.com",
"version": "3.22.0",
"releaseDate": "2026-05-10",
"license": "MIT",
"compatible": "3.22",
"notes": ""
}
+20
View File
@@ -0,0 +1,20 @@
<footer class="footer footer-modern">
<div class="container">
<div class="row align-items-center">
<?php if (defined('BLUDIT_PRO')): ?>
<div class="col-12 text-center">
<p class="m-0 text-uppercase"><?php echo $site->footer(); ?></p>
</div>
<?php else: ?>
<div class="col-md-6 text-center text-md-left mb-3 mb-md-0">
<p class="m-0 text-uppercase"><?php echo $site->footer(); ?></p>
</div>
<div class="col-md-6 text-center text-md-right">
<p class="m-0">
Powered by <a href="https://www.bludit.com" target="_blank" rel="noopener"><strong>BLUDIT</strong></a>
</p>
</div>
<?php endif; ?>
</div>
</div>
</footer>
+24
View File
@@ -0,0 +1,24 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Bludit">
<!-- Dynamic title tag -->
<?php echo Theme::metaTags('title'); ?>
<!-- Dynamic description tag -->
<?php echo Theme::metaTags('description'); ?>
<!-- Include Favicon -->
<?php echo Theme::favicon('img/favicon.png'); ?>
<!-- Include Bootstrap CSS file bootstrap.css -->
<?php echo Theme::cssBootstrap(); ?>
<!-- Include CSS Bootstrap ICONS file from Bludit Core -->
<?php echo Theme::cssBootstrapIcons(); ?>
<!-- Include CSS Styles from this theme -->
<?php echo Theme::css('css/style.css'); ?>
<!-- Load Bludit Plugins: Site head -->
<?php Theme::plugins('siteHead'); ?>
+99
View File
@@ -0,0 +1,99 @@
<?php if (empty($content)) : ?>
<div class="mt-4">
<?php $language->p('No pages found') ?>
</div>
<?php endif ?>
<?php foreach ($content as $page) : ?>
<!-- Post -->
<div class="card card-modern my-5">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<!-- Cover image with gradient overlay -->
<?php if ($page->coverImage()) : ?>
<div class="cover-image-wrapper">
<img class="card-img-top" alt="<?php echo $page->title(); ?>" src="<?php echo $page->coverImage(); ?>" />
</div>
<?php endif ?>
<div class="card-body">
<!-- Title -->
<a href="<?php echo $page->permalink(); ?>">
<h2 class="title"><?php echo $page->title(); ?></h2>
</a>
<!-- Creation date and reading time -->
<div class="metadata mb-4">
<span><i class="bi bi-calendar"></i><?php echo $page->date(); ?></span>
<span><i class="bi bi-clock-history"></i><?php echo $L->get('Reading time') . ': ' . $page->readingTime(); ?></span>
</div>
<!-- Breaked content -->
<?php echo $page->contentBreak(); ?>
<!-- "Read more" button -->
<?php if ($page->readMore()) : ?>
<a class="btn-primary-gradient mt-3" href="<?php echo $page->permalink(); ?>">
<?php echo $L->get('Read more'); ?>
<i class="bi bi-arrow-right"></i>
</a>
<?php endif ?>
<!-- Tags and Category -->
<?php $tagsList = $page->tags(true); $categoryKey = $page->categoryKey(); ?>
<?php if (!empty($tagsList) || $categoryKey) : ?>
<div class="post-taxonomy mt-3">
<?php if ($categoryKey) : ?>
<a class="taxonomy-badge taxonomy-category" href="<?php echo $page->categoryPermalink(); ?>">
<i class="bi bi-folder"></i><?php echo $page->category(); ?>
</a>
<?php endif ?>
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a class="taxonomy-badge taxonomy-tag" href="<?php echo DOMAIN_TAGS . $tagKey; ?>"><i class="bi bi-tag"></i><?php echo $tagName; ?></a>
<?php endforeach ?>
</div>
<?php endif ?>
</div>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</div>
<?php endforeach ?>
<!-- Pagination -->
<?php if (Paginator::numberOfPages() > 1) : ?>
<nav class="paginator mt-5">
<ul class="pagination flex-wrap justify-content-center">
<!-- Previous button -->
<?php if (Paginator::showPrev()) : ?>
<li class="page-item mr-2">
<a class="page-link" href="<?php echo htmlspecialchars(Paginator::previousPageUrl(), ENT_QUOTES, 'UTF-8') ?>" tabindex="-1">
<i class="bi bi-chevron-left"></i> <?php echo $L->get('Previous'); ?>
</a>
</li>
<?php endif; ?>
<!-- Home button -->
<li class="page-item mx-2 <?php if (Paginator::currentPage() == 1) echo 'disabled' ?>">
<a class="page-link" href="<?php echo Theme::siteUrl() ?>">
<i class="bi bi-house-door"></i> Home
</a>
</li>
<!-- Next button -->
<?php if (Paginator::showNext()) : ?>
<li class="page-item ml-2">
<a class="page-link" href="<?php echo htmlspecialchars(Paginator::nextPageUrl(), ENT_QUOTES, 'UTF-8') ?>">
<?php echo $L->get('Next'); ?> <i class="bi bi-chevron-right"></i>
</a>
</li>
<?php endif; ?>
</ul>
</nav>
<?php endif ?>
+39
View File
@@ -0,0 +1,39 @@
<nav class="navbar navbar-expand-md navbar-dark fixed-top navbar-modern text-uppercase">
<div class="container">
<a class="navbar-brand" href="<?php echo Theme::siteUrl() ?>">
<span class="text-white"><?php echo $site->title() ?></span>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<!-- Blog link (when homepage is set to a static page) -->
<?php if ($site->homepage()): ?>
<li class="nav-item">
<a class="nav-link<?php echo ($WHERE_AM_I === 'blog') ? ' active' : '' ?>" href="<?php echo DOMAIN_BASE . ltrim($url->filters('blog'), '/') ?>"><?php echo $L->get('Blog') ?></a>
</li>
<?php endif; ?>
<!-- Static pages -->
<?php foreach ($staticContent as $staticPage) : ?>
<li class="nav-item">
<a class="nav-link<?php echo ($url->slug() == $staticPage->slug()) ? ' active' : '' ?>" href="<?php echo $staticPage->permalink() ?>"><?php echo $staticPage->title() ?></a>
</li>
<?php endforeach ?>
<!-- Social Networks -->
<?php foreach (Theme::socialNetworks() as $key => $label) : ?>
<li class="nav-item">
<a class="nav-link" href="<?php echo $site->{$key}(); ?>" target="_blank" rel="noopener">
<img class="d-none d-sm-block nav-svg-icon" src="<?php echo DOMAIN_THEME . 'img/' . $key . '.svg' ?>" alt="<?php echo $label ?>" />
<span class="d-inline d-sm-none"><?php echo $label; ?></span>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
</nav>
+51
View File
@@ -0,0 +1,51 @@
<!-- Post -->
<div class="card card-modern my-5">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<!-- Cover image with gradient overlay -->
<?php if ($page->coverImage()): ?>
<div class="cover-image-wrapper">
<img class="card-img-top" alt="<?php echo $page->title(); ?>" src="<?php echo $page->coverImage(); ?>"/>
</div>
<?php endif ?>
<div class="card-body">
<!-- Title -->
<h1 class="title"><?php echo $page->title(); ?></h1>
<?php if (!$page->isStatic() && !$url->notFound()): ?>
<!-- Creation date and reading time -->
<div class="metadata mb-4">
<span><i class="bi bi-calendar"></i><?php echo $page->date(); ?></span>
<span><i class="bi bi-clock-history"></i><?php echo $L->get('Reading time') . ': ' . $page->readingTime() ?></span>
</div>
<?php endif ?>
<!-- Full content -->
<div class="content">
<?php echo $page->content(); ?>
</div>
<!-- Tags and Category -->
<?php $tagsList = $page->tags(true); $categoryKey = $page->categoryKey(); ?>
<?php if (!empty($tagsList) || $categoryKey) : ?>
<div class="post-taxonomy mt-3">
<?php if ($categoryKey) : ?>
<a class="taxonomy-badge taxonomy-category" href="<?php echo $page->categoryPermalink(); ?>">
<i class="bi bi-folder"></i><?php echo $page->category(); ?>
</a>
<?php endif ?>
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a class="taxonomy-badge taxonomy-tag" href="<?php echo DOMAIN_TAGS . $tagKey; ?>"><i class="bi bi-tag"></i><?php echo $tagName; ?></a>
<?php endforeach ?>
</div>
<?php endif ?>
</div>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</div>
+3
View File
@@ -0,0 +1,3 @@
<div class="sidebar-container">
<?php Theme::plugins('siteSidebar') ?>
</div>
Binary file not shown.
+839
View File
@@ -0,0 +1,839 @@
:root {
--bg: #07090f;
--bg-2: #0c1018;
--surface: #111722;
--surface-2: #151d2a;
--surface-soft: rgba(17, 23, 34, 0.82);
--border: rgba(139, 166, 199, 0.18);
--border-strong: rgba(139, 166, 199, 0.32);
--text: #f4f8ff;
--text-soft: #b8c6d9;
--text-muted: #8190a6;
--neon-green: #00ff8a;
--neon-red: #ff3157;
--neon-pink: #ff4fd8;
--neon-orange: #ff9f1c;
--neon-blue: #24c8ff;
--shadow: 0 20px 60px rgba(0, 0, 0, 0.34);
--radius: 8px;
}
* {
box-sizing: border-box;
letter-spacing: 0;
}
html {
min-height: 100%;
scroll-behavior: smooth;
}
body {
min-height: 100%;
margin: 0;
background:
linear-gradient(90deg, rgba(36, 200, 255, 0.06) 1px, transparent 1px),
linear-gradient(0deg, rgba(0, 255, 138, 0.04) 1px, transparent 1px),
linear-gradient(180deg, #07090f 0%, #0a0d14 52%, #080a10 100%);
background-size: 64px 64px, 64px 64px, auto;
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
font-size: 1rem;
line-height: 1.65;
}
body::before {
position: fixed;
inset: 0;
z-index: -1;
content: "";
background:
linear-gradient(115deg, rgba(0, 255, 138, 0.08), transparent 26%),
linear-gradient(245deg, rgba(255, 49, 87, 0.08), transparent 28%),
linear-gradient(180deg, transparent 0%, rgba(7, 9, 15, 0.72) 72%);
pointer-events: none;
}
a {
color: var(--neon-blue);
text-decoration: none;
transition: color 0.18s ease, border-color 0.18s ease, background-color 0.18s ease, transform 0.18s ease;
}
a:hover,
a:focus {
color: var(--neon-green);
text-decoration: none;
}
a:focus,
button:focus,
input:focus,
textarea:focus,
select:focus {
outline: 2px solid var(--neon-blue);
outline-offset: 3px;
}
img {
max-width: 100%;
height: auto;
}
.skip-link {
position: absolute;
left: 1rem;
top: 0.75rem;
z-index: 2000;
padding: 0.5rem 0.75rem;
background: var(--neon-green);
color: #061009;
border-radius: var(--radius);
font-weight: 700;
transform: translateY(-150%);
}
.skip-link:focus {
transform: translateY(0);
color: #061009;
}
.site-main {
min-height: 60vh;
}
.neon-navbar {
position: sticky;
top: 0;
z-index: 1000;
padding: 0.65rem 0;
background: rgba(7, 9, 15, 0.94);
border-bottom: 1px solid var(--border);
box-shadow: 0 12px 38px rgba(0, 0, 0, 0.26);
backdrop-filter: blur(16px);
}
.navbar-brand {
display: inline-flex;
align-items: center;
gap: 0.6rem;
color: var(--text) !important;
font-size: 1.02rem;
font-weight: 800;
min-width: 0;
}
.brand-signal {
width: 0.85rem;
height: 0.85rem;
border-radius: 50%;
background: conic-gradient(from 90deg, var(--neon-green), var(--neon-blue), var(--neon-pink), var(--neon-orange), var(--neon-red), var(--neon-green));
box-shadow: 0 0 18px rgba(36, 200, 255, 0.7);
flex: 0 0 auto;
}
.navbar-toggler {
color: var(--text);
border: 1px solid var(--border-strong);
border-radius: var(--radius);
padding: 0.35rem 0.55rem;
}
.navbar-toggler i {
font-size: 1.35rem;
}
.navbar-nav {
align-items: center;
}
.navbar .nav-link {
color: var(--text-soft) !important;
border: 1px solid transparent;
border-radius: var(--radius);
font-size: 0.92rem;
font-weight: 650;
padding: 0.45rem 0.7rem;
}
.navbar .nav-link:hover,
.navbar .nav-link.active {
color: var(--text) !important;
background: rgba(36, 200, 255, 0.09);
border-color: rgba(36, 200, 255, 0.22);
}
.nav-icon-link {
display: inline-flex;
align-items: center;
gap: 0.35rem;
}
.nav-search {
margin-left: 0.8rem;
}
.nav-search-field,
.hero-search {
display: flex;
align-items: center;
gap: 0.55rem;
background: rgba(255, 255, 255, 0.045);
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text-muted);
}
.nav-search-field {
min-width: 220px;
padding: 0.35rem 0.65rem;
}
.nav-search-field input,
.hero-search input {
width: 100%;
min-width: 0;
background: transparent;
color: var(--text);
border: 0;
font: inherit;
}
.nav-search-field input::placeholder,
.hero-search input::placeholder {
color: var(--text-muted);
}
.neon-hero {
padding: 4rem 0 2rem;
}
.hero-panel {
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(260px, 420px);
gap: 2rem;
align-items: end;
padding: 2rem 0 2.3rem;
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
}
.accent-strip {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 0.45rem;
width: min(360px, 100%);
margin-bottom: 1.3rem;
}
.accent-strip span {
display: block;
height: 0.26rem;
border-radius: 99px;
box-shadow: 0 0 20px currentColor;
}
.accent-strip span:nth-child(1) { background: var(--neon-green); color: var(--neon-green); }
.accent-strip span:nth-child(2) { background: var(--neon-red); color: var(--neon-red); }
.accent-strip span:nth-child(3) { background: var(--neon-pink); color: var(--neon-pink); }
.accent-strip span:nth-child(4) { background: var(--neon-orange); color: var(--neon-orange); }
.accent-strip span:nth-child(5) { background: var(--neon-blue); color: var(--neon-blue); }
.hero-kicker {
color: var(--neon-green);
font-size: 0.9rem;
font-weight: 750;
margin: 0 0 0.65rem;
}
.hero-copy h1,
.page-header h1 {
color: var(--text);
font-size: 3rem;
font-weight: 850;
line-height: 1.08;
margin: 0;
max-width: 920px;
}
.hero-copy p:not(.hero-kicker),
.page-header p {
max-width: 720px;
margin: 1rem 0 0;
color: var(--text-soft);
font-size: 1.08rem;
}
.hero-search {
padding: 0.55rem;
align-self: center;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02), 0 0 34px rgba(36, 200, 255, 0.09);
}
.hero-search button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.35rem;
min-height: 2.55rem;
padding: 0.55rem 0.85rem;
background: var(--neon-blue);
color: #031017;
border: 0;
border-radius: var(--radius);
font-weight: 800;
white-space: nowrap;
cursor: pointer;
}
.hero-search button:hover {
background: var(--neon-green);
}
.content-band {
padding: 2.2rem 0 4rem;
}
.single-band {
padding-top: 3rem;
}
.post-list {
display: grid;
gap: 1.35rem;
}
.neon-post {
--post-accent: var(--neon-blue);
position: relative;
overflow: hidden;
background: var(--surface-soft);
border: 1px solid var(--border);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
.post-list .neon-post:nth-child(5n+1) { --post-accent: var(--neon-green); }
.post-list .neon-post:nth-child(5n+2) { --post-accent: var(--neon-red); }
.post-list .neon-post:nth-child(5n+3) { --post-accent: var(--neon-pink); }
.post-list .neon-post:nth-child(5n+4) { --post-accent: var(--neon-orange); }
.post-list .neon-post:nth-child(5n+5) { --post-accent: var(--neon-blue); }
.neon-post::before {
position: absolute;
inset: 0 auto 0 0;
width: 4px;
content: "";
background: var(--post-accent);
box-shadow: 0 0 22px var(--post-accent);
}
.post-cover {
display: block;
overflow: hidden;
max-height: 360px;
border-bottom: 1px solid var(--border);
}
.post-cover img {
display: block;
width: 100%;
height: 100%;
max-height: 360px;
object-fit: cover;
filter: saturate(1.08) contrast(1.04);
transition: transform 0.24s ease;
}
.post-cover:hover img {
transform: scale(1.025);
}
.post-body {
padding: 1.45rem 1.45rem 1.35rem;
}
.post-meta {
display: flex;
flex-wrap: wrap;
gap: 0.55rem 0.95rem;
align-items: center;
color: var(--text-muted);
font-size: 0.88rem;
margin-bottom: 0.75rem;
}
.post-meta span,
.post-meta a {
display: inline-flex;
align-items: center;
gap: 0.35rem;
color: var(--text-muted);
}
.post-title {
font-size: 1.65rem;
line-height: 1.18;
margin: 0 0 0.85rem;
font-weight: 850;
}
.post-title a {
color: var(--text);
}
.post-title a:hover {
color: var(--post-accent);
}
.post-description,
.post-excerpt {
color: var(--text-soft);
}
.post-excerpt p:last-child {
margin-bottom: 0;
}
.taxonomy-list,
.page-taxonomy {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 1rem;
}
.taxonomy-list a,
.page-taxonomy a {
display: inline-flex;
align-items: center;
gap: 0.3rem;
padding: 0.28rem 0.55rem;
background: rgba(255, 255, 255, 0.045);
border: 1px solid var(--border);
border-radius: 999px;
color: var(--text-soft);
font-size: 0.82rem;
font-weight: 700;
}
.taxonomy-list a:hover,
.page-taxonomy a:hover {
color: var(--bg);
background: var(--neon-green);
border-color: var(--neon-green);
}
.read-link,
.back-home,
.neon-pagination a {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.45rem;
min-height: 2.5rem;
padding: 0.48rem 0.75rem;
border: 1px solid rgba(36, 200, 255, 0.36);
border-radius: var(--radius);
color: var(--text);
background: rgba(36, 200, 255, 0.08);
font-weight: 800;
}
.read-link {
margin-top: 1.1rem;
}
.read-link:hover,
.back-home:hover,
.neon-pagination a:hover {
color: #041118;
background: var(--neon-blue);
border-color: var(--neon-blue);
transform: translateY(-1px);
}
.neon-pagination {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
align-items: center;
justify-content: center;
margin-top: 2rem;
}
.neon-sidebar {
position: sticky;
top: 5.25rem;
display: grid;
gap: 1rem;
}
.neon-sidebar .plugin,
.social-panel {
background: rgba(17, 23, 34, 0.76);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 1rem;
box-shadow: var(--shadow);
}
.plugin-label,
.neon-sidebar h2 {
color: var(--text);
font-size: 1rem;
font-weight: 850;
margin: 0 0 0.8rem;
}
.plugin-content,
.plugin-content p,
.plugin-content li {
color: var(--text-soft);
}
.plugin-content ul {
padding-left: 1.1rem;
}
.social-links {
display: flex;
flex-wrap: wrap;
gap: 0.55rem;
}
.social-links a {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.35rem;
height: 2.35rem;
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text);
background: rgba(255, 255, 255, 0.045);
}
.social-links a:hover {
color: #051015;
background: var(--neon-pink);
border-color: var(--neon-pink);
}
.empty-state {
padding: 3rem 1rem;
text-align: center;
color: var(--text-soft);
border: 1px dashed var(--border-strong);
border-radius: var(--radius);
background: rgba(17, 23, 34, 0.5);
}
.empty-state i {
display: block;
color: var(--neon-orange);
font-size: 2rem;
margin-bottom: 0.5rem;
}
.empty-state h2 {
color: var(--text);
font-size: 1.35rem;
margin: 0;
}
.neon-page {
max-width: 920px;
margin: 0 auto;
}
.page-breadcrumb {
display: flex;
flex-wrap: wrap;
gap: 0.45rem;
align-items: center;
color: var(--text-muted);
font-size: 0.92rem;
margin-bottom: 1.5rem;
}
.page-breadcrumb a {
color: var(--text-soft);
}
.page-header {
padding-bottom: 1.5rem;
border-bottom: 1px solid var(--border);
}
.page-cover {
overflow: hidden;
margin: 2rem 0;
border: 1px solid var(--border);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
.page-cover img {
display: block;
width: 100%;
}
.page-content {
color: var(--text-soft);
font-size: 1.05rem;
}
.page-content h2,
.page-content h3,
.page-content h4 {
color: var(--text);
line-height: 1.2;
margin-top: 2rem;
margin-bottom: 0.8rem;
}
.page-content p,
.page-content ul,
.page-content ol {
margin-bottom: 1.1rem;
}
.page-content a {
border-bottom: 1px solid rgba(36, 200, 255, 0.42);
}
.page-content blockquote {
margin: 1.5rem 0;
padding: 1rem 1.15rem;
color: var(--text);
background: rgba(255, 79, 216, 0.08);
border-left: 4px solid var(--neon-pink);
border-radius: var(--radius);
}
.page-content pre,
.page-content code {
background: #05070b;
color: var(--neon-green);
border-radius: var(--radius);
}
.page-content code {
padding: 0.12rem 0.35rem;
}
.page-content pre {
padding: 1rem;
overflow-x: auto;
border: 1px solid rgba(0, 255, 138, 0.22);
}
.page-content table {
width: 100%;
margin: 1.5rem 0;
color: var(--text-soft);
border-collapse: collapse;
border: 1px solid var(--border);
}
.page-content th,
.page-content td {
padding: 0.75rem;
border-bottom: 1px solid var(--border);
}
.page-content th {
color: var(--text);
background: rgba(36, 200, 255, 0.1);
}
.page-taxonomy {
padding-top: 1.4rem;
margin-top: 1.8rem;
border-top: 1px solid var(--border);
}
.back-home {
margin-top: 1.4rem;
}
.site-footer {
padding: 2rem 0;
color: var(--text-muted);
border-top: 1px solid var(--border);
background: rgba(7, 9, 15, 0.72);
}
.footer-grid {
display: flex;
flex-wrap: wrap;
gap: 1rem;
align-items: center;
justify-content: space-between;
}
.footer-grid p {
margin: 0;
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 0.8rem;
align-items: center;
}
.footer-links a {
display: inline-flex;
align-items: center;
gap: 0.35rem;
color: var(--text-soft);
}
body .search-results-header {
margin: 1.5rem 0 0;
padding: 1.5rem 0;
border-bottom: 1px solid var(--border);
}
body .search-results-header h1 {
color: var(--text);
font-size: 1.65rem;
}
body .search-results-header .search-query {
color: var(--neon-pink);
text-shadow: 0 0 18px rgba(255, 79, 216, 0.45);
}
body .search-results-header .search-count,
body .search-no-results p,
body .search-no-results .search-suggestions ul {
color: var(--text-soft);
}
body .search-no-results {
color: var(--text-soft);
}
body .search-no-results h2,
body .search-no-results h3 {
color: var(--text);
}
body .search-highlight {
background: rgba(255, 159, 28, 0.28);
color: var(--text);
border-radius: 4px;
box-shadow: 0 0 16px rgba(255, 159, 28, 0.18);
}
body .search-result-excerpt {
color: var(--text-soft);
}
body .search-inline-form input[type="search"],
body .plugin-search .search-plugin-form input[type="search"] {
width: 100%;
background: rgba(5, 7, 11, 0.78);
color: var(--text);
border: 1px solid var(--border-strong);
border-radius: var(--radius);
}
body .search-inline-form input[type="search"]:focus,
body .plugin-search .search-plugin-form input[type="search"]:focus {
border-color: var(--neon-blue);
box-shadow: 0 0 0 4px rgba(36, 200, 255, 0.14);
}
body .plugin-search .search-plugin-form button {
width: 100%;
background: var(--neon-blue);
color: #041118;
border: 0;
border-radius: var(--radius);
font-weight: 800;
}
body .plugin-search .search-plugin-form button:hover {
background: var(--neon-green);
}
@media (max-width: 991.98px) {
.navbar-nav {
align-items: stretch;
padding-top: 0.8rem;
}
.nav-search {
margin: 0.8rem 0 0;
}
.nav-search-field {
width: 100%;
}
.hero-panel {
grid-template-columns: 1fr;
gap: 1.35rem;
}
.neon-sidebar {
position: static;
margin-top: 1.5rem;
}
}
@media (max-width: 767.98px) {
.neon-hero {
padding: 2.6rem 0 1.3rem;
}
.hero-panel {
padding: 1.4rem 0 1.6rem;
}
.hero-copy h1,
.page-header h1 {
font-size: 2.15rem;
}
.hero-copy p:not(.hero-kicker),
.page-header p {
font-size: 1rem;
}
.hero-search {
align-items: stretch;
flex-wrap: wrap;
}
.hero-search input {
flex: 1 1 180px;
min-height: 2.55rem;
}
.hero-search button {
flex: 1 1 100%;
}
.post-body {
padding: 1.15rem;
}
.post-title {
font-size: 1.35rem;
}
.content-band,
.single-band {
padding-top: 1.5rem;
}
body .search-results-header h1 {
font-size: 1.35rem;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

+33
View File
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="<?php echo Theme::lang() ?>">
<head>
<?php include(THEME_DIR_PHP . 'head.php'); ?>
</head>
<body>
<a class="skip-link" href="#main-content"><?php echo $L->get('Skip to main content'); ?></a>
<?php include(THEME_DIR_PHP . 'navbar.php'); ?>
<?php Theme::plugins('siteBodyBegin'); ?>
<main id="main-content" class="site-main">
<?php
if ($WHERE_AM_I == 'page') {
include(THEME_DIR_PHP . 'page.php');
} else {
include(THEME_DIR_PHP . 'home.php');
}
?>
</main>
<?php include(THEME_DIR_PHP . 'footer.php'); ?>
<?php echo Theme::jquery(); ?>
<?php echo Theme::jsBootstrap(); ?>
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
{
"theme-data":
{
"name": "Dark Neon",
"description": "A dark Bludit theme with green, red, pink, orange, and blue neon accents, built on Bludit theme hooks and Bootstrap assets."
},
"Back to home": "Back to home",
"Breadcrumb": "Breadcrumb",
"Connect": "Connect",
"Main navigation": "Main navigation",
"Open result": "Open result",
"Page navigation": "Page navigation",
"Read more": "Read more",
"Search": "Search",
"Sitemap": "Sitemap",
"Skip to main content": "Skip to main content",
"Toggle navigation": "Toggle navigation"
}
+10
View File
@@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://themes.bludit.com",
"version": "3.22.0",
"releaseDate": "2026-07-03",
"license": "MIT",
"compatible": "3.22",
"notes": ""
}
+18
View File
@@ -0,0 +1,18 @@
<footer class="site-footer">
<div class="container">
<div class="footer-grid">
<p><?php echo $site->footer(); ?></p>
<div class="footer-links">
<?php if (Theme::rssUrl()) : ?>
<a href="<?php echo Theme::rssUrl(); ?>"><i class="bi bi-rss" aria-hidden="true"></i>RSS</a>
<?php endif; ?>
<?php if (Theme::sitemapUrl()) : ?>
<a href="<?php echo Theme::sitemapUrl(); ?>"><i class="bi bi-diagram-3" aria-hidden="true"></i><?php echo $L->get('Sitemap'); ?></a>
<?php endif; ?>
<?php if (!defined('BLUDIT_PRO')) : ?>
<a href="https://www.bludit.com" target="_blank" rel="noopener">Bludit</a>
<?php endif; ?>
</div>
</div>
</div>
</footer>
+16
View File
@@ -0,0 +1,16 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Bludit">
<meta name="theme-color" content="#07090f">
<?php echo Theme::metaTagTitle(); ?>
<?php echo Theme::metaTagDescription(); ?>
<?php echo Theme::favicon('img/favicon.png'); ?>
<link rel="apple-touch-icon" href="<?php echo DOMAIN_THEME_IMG . 'favicon.png'; ?>">
<?php echo Theme::cssBootstrap(); ?>
<?php echo Theme::cssBootstrapIcons(); ?>
<?php echo Theme::css('css/style.css'); ?>
<?php Theme::plugins('siteHead'); ?>
+151
View File
@@ -0,0 +1,151 @@
<?php
$searchPlugin = pluginActivated('pluginSearch') ? getPlugin('pluginSearch') : false;
$sidebarHtml = '';
ob_start();
Theme::plugins('siteSidebar');
$sidebarHtml = trim(ob_get_clean());
$socialNetworks = Theme::socialNetworks();
$socialIconMap = array(
'github' => 'github',
'gitlab' => 'gitlab',
'twitter' => 'twitter-x',
'facebook' => 'facebook',
'instagram' => 'instagram',
'codepen' => 'codepen',
'linkedin' => 'linkedin',
'telegram' => 'telegram',
'youtube' => 'youtube',
'dribbble' => 'dribbble'
);
?>
<?php if ($WHERE_AM_I !== 'search') : ?>
<section class="neon-hero">
<div class="container">
<div class="hero-panel">
<div class="accent-strip" aria-hidden="true">
<span></span><span></span><span></span><span></span><span></span>
</div>
<div class="hero-copy">
<p class="hero-kicker"><?php echo htmlspecialchars($site->title(), ENT_QUOTES, 'UTF-8'); ?></p>
<h1><?php echo htmlspecialchars($site->slogan() ? $site->slogan() : $site->title(), ENT_QUOTES, 'UTF-8'); ?></h1>
<?php if ($site->description()) : ?>
<p><?php echo htmlspecialchars($site->description(), ENT_QUOTES, 'UTF-8'); ?></p>
<?php endif; ?>
</div>
<?php if ($searchPlugin) : ?>
<form class="hero-search" role="search" onsubmit="return darkNeonSearch('dark-neon-hero-search');">
<label class="sr-only" for="dark-neon-hero-search"><?php echo $L->get('Search'); ?></label>
<i class="bi bi-search" aria-hidden="true"></i>
<input id="dark-neon-hero-search" type="search" placeholder="<?php echo htmlspecialchars($L->get('Search'), ENT_QUOTES, 'UTF-8'); ?>" autocomplete="off">
<button type="submit"><i class="bi bi-arrow-right" aria-hidden="true"></i><span><?php echo $L->get('Search'); ?></span></button>
</form>
<?php endif; ?>
</div>
</div>
</section>
<?php endif; ?>
<section class="content-band">
<div class="container">
<div class="row">
<div class="<?php echo (!empty($sidebarHtml) || !empty($socialNetworks)) ? 'col-lg-8' : 'col-lg-9 mx-auto'; ?>">
<?php if (empty($content)) : ?>
<div class="empty-state">
<i class="bi bi-stars" aria-hidden="true"></i>
<h2><?php $language->p('No pages found'); ?></h2>
</div>
<?php endif; ?>
<div class="post-list">
<?php foreach ($content as $page) : ?>
<article class="neon-post">
<?php Theme::plugins('pageBegin'); ?>
<?php if ($page->coverImage()) : ?>
<a class="post-cover" href="<?php echo $page->permalink(); ?>" aria-label="<?php echo htmlspecialchars($page->title(), ENT_QUOTES, 'UTF-8'); ?>">
<img src="<?php echo $page->coverImage(); ?>" alt="<?php echo htmlspecialchars($page->title(), ENT_QUOTES, 'UTF-8'); ?>" loading="lazy">
</a>
<?php endif; ?>
<div class="post-body">
<div class="post-meta">
<span><i class="bi bi-calendar3" aria-hidden="true"></i><?php echo $page->date(); ?></span>
<span><i class="bi bi-stopwatch" aria-hidden="true"></i><?php echo $page->readingTime(); ?></span>
<?php if ($page->categoryKey()) : ?>
<a href="<?php echo $page->categoryPermalink(); ?>"><i class="bi bi-folder2-open" aria-hidden="true"></i><?php echo htmlspecialchars($page->category(), ENT_QUOTES, 'UTF-8'); ?></a>
<?php endif; ?>
</div>
<h2 class="post-title">
<a href="<?php echo $page->permalink(); ?>"><?php echo htmlspecialchars($page->title(), ENT_QUOTES, 'UTF-8'); ?></a>
</h2>
<?php if ($page->description() && $WHERE_AM_I !== 'search') : ?>
<p class="post-description"><?php echo htmlspecialchars($page->description(), ENT_QUOTES, 'UTF-8'); ?></p>
<?php endif; ?>
<div class="post-excerpt">
<?php echo $page->contentBreak(); ?>
</div>
<?php $tagsList = $page->tags(true); ?>
<?php if (!empty($tagsList)) : ?>
<div class="taxonomy-list">
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a href="<?php echo DOMAIN_TAGS . $tagKey; ?>"><i class="bi bi-tag" aria-hidden="true"></i><?php echo htmlspecialchars($tagName, ENT_QUOTES, 'UTF-8'); ?></a>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if ($page->readMore() || $WHERE_AM_I === 'search') : ?>
<a class="read-link" href="<?php echo $page->permalink(); ?>">
<span><?php echo ($WHERE_AM_I === 'search') ? $L->get('Open result') : $L->get('Read more'); ?></span>
<i class="bi bi-arrow-right" aria-hidden="true"></i>
</a>
<?php endif; ?>
</div>
<?php Theme::plugins('pageEnd'); ?>
</article>
<?php endforeach; ?>
</div>
<?php if (Paginator::numberOfPages() > 1) : ?>
<nav class="neon-pagination" aria-label="<?php echo htmlspecialchars($L->get('Page navigation'), ENT_QUOTES, 'UTF-8'); ?>">
<?php if (Paginator::showPrev()) : ?>
<a href="<?php echo htmlspecialchars(Paginator::previousPageUrl(), ENT_QUOTES, 'UTF-8'); ?>"><i class="bi bi-chevron-left" aria-hidden="true"></i><?php echo $L->get('Previous'); ?></a>
<?php endif; ?>
<a href="<?php echo Theme::siteUrl(); ?>"><i class="bi bi-house" aria-hidden="true"></i><?php echo $L->get('Home'); ?></a>
<?php if (Paginator::showNext()) : ?>
<a href="<?php echo htmlspecialchars(Paginator::nextPageUrl(), ENT_QUOTES, 'UTF-8'); ?>"><?php echo $L->get('Next'); ?><i class="bi bi-chevron-right" aria-hidden="true"></i></a>
<?php endif; ?>
</nav>
<?php endif; ?>
</div>
<?php if (!empty($sidebarHtml) || !empty($socialNetworks)) : ?>
<aside class="col-lg-4">
<div class="neon-sidebar">
<?php echo $sidebarHtml; ?>
<?php if (!empty($socialNetworks)) : ?>
<div class="plugin social-panel">
<h2 class="plugin-label"><?php echo $L->get('Connect'); ?></h2>
<div class="plugin-content social-links">
<?php foreach ($socialNetworks as $key => $label) : ?>
<?php $icon = isset($socialIconMap[$key]) ? $socialIconMap[$key] : 'link-45deg'; ?>
<a href="<?php echo htmlspecialchars($site->{$key}(), ENT_QUOTES, 'UTF-8'); ?>" target="_blank" rel="noopener" aria-label="<?php echo htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); ?>">
<i class="bi bi-<?php echo $icon; ?>" aria-hidden="true"></i>
</a>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
</div>
</aside>
<?php endif; ?>
</div>
</div>
</section>
+80
View File
@@ -0,0 +1,80 @@
<?php
$searchPlugin = pluginActivated('pluginSearch') ? getPlugin('pluginSearch') : false;
$searchValue = ($searchPlugin && $WHERE_AM_I === 'search') ? $searchPlugin->getSearchTerm() : '';
$searchMinChars = $searchPlugin ? max(1, (int) $searchPlugin->getValue('minChars')) : 1;
$searchAction = json_encode(Theme::siteUrl() . 'search/');
$socialIconMap = array(
'github' => 'github',
'gitlab' => 'gitlab',
'twitter' => 'twitter-x',
'facebook' => 'facebook',
'instagram' => 'instagram',
'codepen' => 'codepen',
'linkedin' => 'linkedin',
'telegram' => 'telegram',
'youtube' => 'youtube',
'dribbble' => 'dribbble'
);
?>
<nav class="navbar navbar-expand-lg neon-navbar" aria-label="<?php echo htmlspecialchars($L->get('Main navigation'), ENT_QUOTES, 'UTF-8'); ?>">
<div class="container">
<a class="navbar-brand" href="<?php echo Theme::siteUrl(); ?>">
<span class="brand-signal" aria-hidden="true"></span>
<span><?php echo htmlspecialchars($site->title(), ENT_QUOTES, 'UTF-8'); ?></span>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#darkNeonNavbar" aria-controls="darkNeonNavbar" aria-expanded="false" aria-label="<?php echo htmlspecialchars($L->get('Toggle navigation'), ENT_QUOTES, 'UTF-8'); ?>">
<i class="bi bi-list" aria-hidden="true"></i>
</button>
<div class="collapse navbar-collapse" id="darkNeonNavbar">
<ul class="navbar-nav ml-auto">
<?php if ($site->homepage()) : ?>
<li class="nav-item">
<a class="nav-link<?php echo ($WHERE_AM_I === 'blog') ? ' active' : ''; ?>" href="<?php echo DOMAIN_BASE . ltrim($url->filters('blog'), '/'); ?>"><?php echo $L->get('Blog'); ?></a>
</li>
<?php endif; ?>
<?php foreach ($staticContent as $staticPage) : ?>
<li class="nav-item">
<a class="nav-link<?php echo ($url->slug() == $staticPage->slug()) ? ' active' : ''; ?>" href="<?php echo $staticPage->permalink(); ?>"><?php echo htmlspecialchars($staticPage->title(), ENT_QUOTES, 'UTF-8'); ?></a>
</li>
<?php endforeach; ?>
<?php foreach (Theme::socialNetworks() as $key => $label) : ?>
<?php $icon = isset($socialIconMap[$key]) ? $socialIconMap[$key] : 'link-45deg'; ?>
<li class="nav-item">
<a class="nav-link nav-icon-link" href="<?php echo htmlspecialchars($site->{$key}(), ENT_QUOTES, 'UTF-8'); ?>" target="_blank" rel="noopener" aria-label="<?php echo htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); ?>">
<i class="bi bi-<?php echo $icon; ?>" aria-hidden="true"></i>
<span class="d-lg-none"><?php echo htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); ?></span>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php if ($searchPlugin) : ?>
<form class="form-inline nav-search" role="search" onsubmit="return darkNeonSearch('dark-neon-nav-search');">
<label class="sr-only" for="dark-neon-nav-search"><?php echo $L->get('Search'); ?></label>
<div class="nav-search-field">
<i class="bi bi-search" aria-hidden="true"></i>
<input id="dark-neon-nav-search" type="search" value="<?php echo htmlspecialchars($searchValue, ENT_QUOTES, 'UTF-8'); ?>" placeholder="<?php echo htmlspecialchars($L->get('Search'), ENT_QUOTES, 'UTF-8'); ?>" autocomplete="off">
</div>
</form>
<?php endif; ?>
</div>
</div>
</nav>
<?php if ($searchPlugin) : ?>
<script>
function darkNeonSearch(inputId) {
var input = document.getElementById(inputId);
if (!input) return false;
var value = input.value.trim();
if (value.length < <?php echo $searchMinChars; ?>) return false;
window.location.href = <?php echo $searchAction; ?> + encodeURIComponent(value);
return false;
}
</script>
<?php endif; ?>
+62
View File
@@ -0,0 +1,62 @@
<section class="content-band single-band">
<div class="container">
<article class="neon-page">
<?php Theme::plugins('pageBegin'); ?>
<nav class="page-breadcrumb" aria-label="<?php echo htmlspecialchars($L->get('Breadcrumb'), ENT_QUOTES, 'UTF-8'); ?>">
<a href="<?php echo Theme::siteUrl(); ?>"><?php echo htmlspecialchars($site->title(), ENT_QUOTES, 'UTF-8'); ?></a>
<?php if (!$page->isStatic() && $page->categoryKey()) : ?>
<span>/</span>
<a href="<?php echo $page->categoryPermalink(); ?>"><?php echo htmlspecialchars($page->category(), ENT_QUOTES, 'UTF-8'); ?></a>
<?php endif; ?>
</nav>
<header class="page-header">
<div class="accent-strip" aria-hidden="true">
<span></span><span></span><span></span><span></span><span></span>
</div>
<div class="post-meta">
<?php if (!$page->isStatic() && !$url->notFound()) : ?>
<span><i class="bi bi-calendar3" aria-hidden="true"></i><?php echo $page->date(); ?></span>
<span><i class="bi bi-stopwatch" aria-hidden="true"></i><?php echo $page->readingTime(); ?></span>
<?php if ($page->user('nickname')) : ?>
<span><i class="bi bi-person" aria-hidden="true"></i><?php echo htmlspecialchars($page->user('nickname'), ENT_QUOTES, 'UTF-8'); ?></span>
<?php endif; ?>
<?php endif; ?>
</div>
<h1><?php echo htmlspecialchars($page->title(), ENT_QUOTES, 'UTF-8'); ?></h1>
<?php if ($page->description()) : ?>
<p><?php echo htmlspecialchars($page->description(), ENT_QUOTES, 'UTF-8'); ?></p>
<?php endif; ?>
</header>
<?php if ($page->coverImage()) : ?>
<figure class="page-cover">
<img src="<?php echo $page->coverImage(); ?>" alt="<?php echo htmlspecialchars($page->title(), ENT_QUOTES, 'UTF-8'); ?>" loading="lazy">
</figure>
<?php endif; ?>
<div class="page-content">
<?php echo $page->content(); ?>
</div>
<?php $tagsList = $page->tags(true); ?>
<?php if (!empty($tagsList) || $page->categoryKey()) : ?>
<footer class="page-taxonomy">
<?php if ($page->categoryKey()) : ?>
<a href="<?php echo $page->categoryPermalink(); ?>"><i class="bi bi-folder2-open" aria-hidden="true"></i><?php echo htmlspecialchars($page->category(), ENT_QUOTES, 'UTF-8'); ?></a>
<?php endif; ?>
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a href="<?php echo DOMAIN_TAGS . $tagKey; ?>"><i class="bi bi-tag" aria-hidden="true"></i><?php echo htmlspecialchars($tagName, ENT_QUOTES, 'UTF-8'); ?></a>
<?php endforeach; ?>
</footer>
<?php endif; ?>
<?php if (!$page->isStatic()) : ?>
<a class="back-home" href="<?php echo Theme::siteUrl(); ?>"><i class="bi bi-arrow-left" aria-hidden="true"></i><?php echo $L->get('Back to home'); ?></a>
<?php endif; ?>
<?php Theme::plugins('pageEnd'); ?>
</article>
</div>
</section>
+110
View File
@@ -0,0 +1,110 @@
/* Flavor Theme - Custom Styles */
/* Base font */
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
}
/* Prose content styles for article body */
.prose-content h1 { font-size: 2rem; font-weight: 700; margin: 1.5em 0 0.5em; line-height: 1.3; }
.prose-content h2 { font-size: 1.5rem; font-weight: 600; margin: 1.5em 0 0.5em; line-height: 1.3; }
.prose-content h3 { font-size: 1.25rem; font-weight: 600; margin: 1.25em 0 0.5em; line-height: 1.4; }
.prose-content h4 { font-size: 1.125rem; font-weight: 600; margin: 1em 0 0.5em; line-height: 1.4; }
.prose-content p { margin: 1em 0; }
.prose-content a {
color: #059669;
text-decoration: underline;
text-decoration-color: rgba(5, 150, 105, 0.3);
text-underline-offset: 2px;
transition: text-decoration-color 0.2s;
}
.prose-content a:hover {
text-decoration-color: #059669;
}
.prose-content ul,
.prose-content ol {
margin: 1em 0;
padding-left: 1.5em;
}
.prose-content li { margin: 0.25em 0; }
.prose-content blockquote {
border-left: 3px solid #059669;
margin: 1.5em 0;
padding: 0.5em 1em;
color: #6b7280;
font-style: italic;
}
.prose-content pre {
background: #1f2937;
color: #e5e7eb;
border-radius: 0.5rem;
padding: 1rem;
overflow-x: auto;
margin: 1.5em 0;
font-size: 0.875rem;
line-height: 1.7;
}
.prose-content code {
font-size: 0.875em;
background: #f3f4f6;
padding: 0.125em 0.375em;
border-radius: 0.25rem;
}
.prose-content pre code {
background: none;
padding: 0;
border-radius: 0;
}
.prose-content img {
max-width: 100%;
height: auto;
border-radius: 0.5rem;
margin: 1.5em 0;
}
.prose-content table {
width: 100%;
border-collapse: collapse;
margin: 1.5em 0;
}
.prose-content th,
.prose-content td {
border: 1px solid #e5e7eb;
padding: 0.5em 0.75em;
text-align: left;
}
.prose-content th {
background: #f9fafb;
font-weight: 600;
}
.prose-content hr {
border: none;
border-top: 1px solid #e5e7eb;
margin: 2em 0;
}
/* Dark mode prose overrides */
`@media` (prefers-color-scheme: dark) {
.prose-content code {
background: `#374151`;
}
.prose-content blockquote {
color: `#9ca3af`;
}
.prose-content th {
background: `#1f2937`;
}
.prose-content th,
.prose-content td {
border-color: `#374151`;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

+34
View File
@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="<?php echo Theme::lang() ?>">
<head>
<?php include(THEME_DIR_PHP.'head.php'); ?>
</head>
<body class="bg-white dark:bg-gray-950 text-gray-900 dark:text-gray-100 antialiased">
<!-- Load Bludit Plugins: Site Body Begin -->
<?php Theme::plugins('siteBodyBegin'); ?>
<!-- Navbar -->
<?php include(THEME_DIR_PHP.'navbar.php'); ?>
<!-- Content -->
<main class="max-w-2xl mx-auto px-4 py-8">
<?php
if ($url->notFound()) {
include(THEME_DIR_PHP.'404.php');
} elseif ($WHERE_AM_I === 'page') {
include(THEME_DIR_PHP.'page.php');
} else {
include(THEME_DIR_PHP.'home.php');
}
?>
</main>
<!-- Footer -->
<?php include(THEME_DIR_PHP.'footer.php'); ?>
<!-- Load Bludit Plugins: Site Body End -->
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
+13
View File
@@ -0,0 +1,13 @@
{
"theme-data":
{
"name": "Flavor",
"description": "A minimal, clean blog theme powered by Tailwind CSS. Features a centered layout, elegant typography with Inter font, and emerald accents."
},
"Read more": "Read more",
"Reading time": "Reading time",
"read": "read",
"Back to home": "Back to home",
"Previous": "Previous",
"Next": "Next"
}
+10
View File
@@ -0,0 +1,10 @@
{
"author": "Bludit",
"email": "",
"website": "https://themes.bludit.com",
"version": "3.22.0",
"releaseDate": "2026-05-10",
"license": "MIT",
"compatible": "3.22",
"notes": ""
}
+12
View File
@@ -0,0 +1,12 @@
<article class="py-16 text-center">
<p class="text-6xl font-bold text-gray-300 dark:text-gray-700 mb-4">404</p>
<h1 class="text-2xl font-bold text-gray-900 dark:text-white mb-4">
<?php echo $L->get('Page not found'); ?>
</h1>
<p class="text-gray-500 dark:text-gray-400 mb-8 max-w-md mx-auto">
<?php echo $L->get('The page you are looking for does not exist or has been moved.'); ?>
</p>
<a href="<?php echo Theme::siteUrl(); ?>" class="inline-flex items-center text-sm font-medium text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 no-underline transition-colors">
&larr; <?php echo $L->get('Back to home'); ?>
</a>
</article>
+12
View File
@@ -0,0 +1,12 @@
<footer class="border-t border-gray-200 dark:border-gray-800 mt-8">
<div class="max-w-2xl mx-auto px-4 py-8">
<div class="flex flex-col sm:flex-row items-center justify-between gap-4 text-sm text-gray-500 dark:text-gray-400">
<p class="m-0"><?php echo $site->footer(); ?></p>
<?php if (!defined('BLUDIT_PRO')): ?>
<p class="m-0">
Powered by <a href="https://www.bludit.com" target="_blank" rel="noopener" class="text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 no-underline font-medium">Bludit</a>
</p>
<?php endif; ?>
</div>
</div>
</footer>
+207
View File
@@ -0,0 +1,207 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="Bludit">
<!-- Dynamic title tag -->
<?php echo Theme::metaTags('title'); ?>
<!-- Dynamic description tag -->
<?php echo Theme::metaTags('description'); ?>
<!-- Canonical URL -->
<?php if ($WHERE_AM_I === 'page'): ?>
<link rel="canonical" href="<?php echo $page->permalink(); ?>">
<?php else: ?>
<link rel="canonical" href="<?php echo Theme::siteUrl(); ?>">
<?php endif; ?>
<!-- Robots meta -->
<?php if ($WHERE_AM_I === 'page'): ?>
<?php
$robotsDirectives = [];
if ($page->noindex()) $robotsDirectives[] = 'noindex';
if ($page->nofollow()) $robotsDirectives[] = 'nofollow';
if ($page->noarchive()) $robotsDirectives[] = 'noarchive';
if (!empty($robotsDirectives)):
?>
<meta name="robots" content="<?php echo implode(', ', $robotsDirectives); ?>">
<?php endif; ?>
<?php endif; ?>
<!-- Open Graph -->
<meta property="og:site_name" content="<?php echo $site->title(); ?>">
<meta property="og:locale" content="<?php echo $site->locale(); ?>">
<?php if ($WHERE_AM_I === 'page'): ?>
<meta property="og:type" content="article">
<meta property="og:title" content="<?php echo $page->title(); ?>">
<meta property="og:description" content="<?php echo $page->description(); ?>">
<meta property="og:url" content="<?php echo $page->permalink(); ?>">
<?php if ($page->coverImage()): ?>
<meta property="og:image" content="<?php echo $page->coverImage(true); ?>">
<meta property="og:image:alt" content="<?php echo $page->title(); ?>">
<?php endif; ?>
<meta property="article:published_time" content="<?php echo $page->dateRaw(); ?>">
<?php if ($page->dateModified('Y-m-d\TH:i:sP')): ?>
<meta property="article:modified_time" content="<?php echo $page->dateModified('Y-m-d\TH:i:sP'); ?>">
<?php endif; ?>
<?php if ($page->user('nickname')): ?>
<meta property="article:author" content="<?php echo $page->user('nickname'); ?>">
<?php endif; ?>
<?php $ogTags = $page->tags(true); ?>
<?php foreach ($ogTags as $tagKey => $tagName): ?>
<meta property="article:tag" content="<?php echo $tagName; ?>">
<?php endforeach; ?>
<?php else: ?>
<meta property="og:type" content="website">
<meta property="og:title" content="<?php echo $site->title(); ?>">
<meta property="og:description" content="<?php echo $site->description(); ?>">
<meta property="og:url" content="<?php echo Theme::siteUrl(); ?>">
<?php endif; ?>
<!-- Twitter Card -->
<meta name="twitter:card" content="<?php echo ($WHERE_AM_I === 'page' && $page->coverImage()) ? 'summary_large_image' : 'summary'; ?>">
<?php if ($site->twitter()): ?>
<meta name="twitter:site" content="<?php echo $site->twitter(); ?>">
<?php endif; ?>
<?php if ($WHERE_AM_I === 'page'): ?>
<meta name="twitter:title" content="<?php echo $page->title(); ?>">
<meta name="twitter:description" content="<?php echo $page->description(); ?>">
<?php if ($page->coverImage()): ?>
<meta name="twitter:image" content="<?php echo $page->coverImage(true); ?>">
<meta name="twitter:image:alt" content="<?php echo $page->title(); ?>">
<?php endif; ?>
<?php else: ?>
<meta name="twitter:title" content="<?php echo $site->title(); ?>">
<meta name="twitter:description" content="<?php echo $site->description(); ?>">
<?php endif; ?>
<!-- RSS Feed -->
<?php if (Theme::rssUrl()): ?>
<link rel="alternate" type="application/rss+xml" title="<?php echo $site->title(); ?> - RSS Feed" href="<?php echo Theme::rssUrl(); ?>">
<?php endif; ?>
<!-- JSON-LD Structured Data -->
<?php if ($WHERE_AM_I === 'page' && !$page->isStatic()): ?>
<script type="application/ld+json">
<?php
$jsonLd = [
'@context' => 'https://schema.org',
'@type' => 'BlogPosting',
'mainEntityOfPage' => [
'@type' => 'WebPage',
'@id' => $page->permalink()
],
'headline' => $page->title(),
'description' => $page->description(),
'datePublished' => $page->dateRaw(),
'url' => $page->permalink(),
'publisher' => [
'@type' => 'Organization',
'name' => $site->title()
]
];
if ($page->dateModified('Y-m-d\TH:i:sP')) {
$jsonLd['dateModified'] = $page->dateModified('Y-m-d\TH:i:sP');
}
if ($page->coverImage()) {
$jsonLd['image'] = [
'@type' => 'ImageObject',
'url' => $page->coverImage(true)
];
}
if ($page->user('nickname')) {
$jsonLd['author'] = [
'@type' => 'Person',
'name' => $page->user('nickname')
];
}
$seoTags = $page->tags(true);
if (!empty($seoTags)) {
$jsonLd['keywords'] = implode(', ', array_values($seoTags));
}
if ($page->readingTime()) {
$jsonLd['timeRequired'] = 'PT' . intval($page->readingTime()) . 'M';
}
echo json_encode($jsonLd, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
</script>
<!-- Breadcrumb JSON-LD -->
<script type="application/ld+json">
<?php
$breadcrumbItems = [
[
'@type' => 'ListItem',
'position' => 1,
'name' => $site->title(),
'item' => Theme::siteUrl()
]
];
$position = 2;
if ($page->categoryKey()) {
$breadcrumbItems[] = [
'@type' => 'ListItem',
'position' => $position,
'name' => $page->category(),
'item' => $page->categoryPermalink()
];
$position++;
}
$breadcrumbItems[] = [
'@type' => 'ListItem',
'position' => $position,
'name' => $page->title(),
'item' => $page->permalink()
];
echo json_encode([
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => $breadcrumbItems
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
</script>
<?php elseif ($WHERE_AM_I !== 'page'): ?>
<script type="application/ld+json">
<?php
echo json_encode([
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => $site->title(),
'description' => $site->description(),
'url' => Theme::siteUrl()
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
</script>
<?php endif; ?>
<!-- Include Favicon -->
<?php echo Theme::favicon('img/favicon.png'); ?>
<!-- Tailwind CSS v4 via CDN -->
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<style type="text/tailwindcss">
@theme {
--font-sans: 'Inter', system-ui, -apple-system, sans-serif;
--color-accent-50: #ecfdf5;
--color-accent-100: #d1fae5;
--color-accent-200: #a7f3d0;
--color-accent-300: #6ee7b7;
--color-accent-400: #34d399;
--color-accent-500: #10b981;
--color-accent-600: #059669;
--color-accent-700: #047857;
--color-accent-800: #065f46;
--color-accent-900: #064e3b;
}
</style>
<!-- Google Fonts: Inter -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<!-- Include CSS Styles from this theme -->
<?php echo Theme::css('css/style.css'); ?>
<!-- Load Bludit Plugins: Site head -->
<?php Theme::plugins('siteHead'); ?>
+90
View File
@@ -0,0 +1,90 @@
<?php if (empty($content)) : ?>
<p class="text-gray-500 dark:text-gray-400 mt-8"><?php $language->p('No pages found') ?></p>
<?php endif ?>
<div class="divide-y divide-gray-200 dark:divide-gray-800">
<?php foreach ($content as $page) : ?>
<article class="py-8">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<!-- Cover image -->
<?php if ($page->coverImage()) : ?>
<div class="mb-4 rounded-lg overflow-hidden">
<img class="w-full h-auto" alt="<?php echo $page->title(); ?>" src="<?php echo $page->coverImage(); ?>" loading="lazy" />
</div>
<?php endif ?>
<!-- Date -->
<time class="block text-sm text-gray-500 dark:text-gray-400 mb-2" datetime="<?php echo $page->dateRaw(); ?>">
<?php echo $page->date(); ?>
</time>
<!-- Title -->
<h2 class="text-2xl font-bold mb-2">
<a href="<?php echo $page->permalink(); ?>" class="text-gray-900 dark:text-white hover:text-accent-600 dark:hover:text-accent-400 transition-colors no-underline">
<?php echo $page->title(); ?>
</a>
</h2>
<!-- Reading time -->
<p class="text-sm text-gray-500 dark:text-gray-400 mb-3">
<?php echo $page->readingTime(); ?> <?php echo $L->get('read'); ?>
</p>
<!-- Content excerpt -->
<div class="prose-content text-gray-600 dark:text-gray-300 leading-relaxed">
<?php echo $page->contentBreak(); ?>
</div>
<!-- Read more -->
<?php if ($page->readMore()) : ?>
<a href="<?php echo $page->permalink(); ?>" class="inline-flex items-center mt-4 text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium text-sm no-underline transition-colors">
<?php echo $L->get('Read more'); ?> &rarr;
</a>
<?php endif ?>
<!-- Tags and Category -->
<?php $tagsList = $page->tags(true); $categoryKey = $page->categoryKey(); ?>
<?php if (!empty($tagsList) || $categoryKey) : ?>
<div class="flex flex-wrap gap-2 mt-4">
<?php if ($categoryKey) : ?>
<a class="inline-block text-xs font-medium px-2.5 py-1 rounded-full bg-accent-100 text-accent-700 dark:bg-accent-900 dark:text-accent-300 hover:bg-accent-200 dark:hover:bg-accent-800 transition-colors no-underline" href="<?php echo $page->categoryPermalink(); ?>">
<?php echo $page->category(); ?>
</a>
<?php endif ?>
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a class="inline-block text-xs font-medium px-2.5 py-1 rounded-full bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors no-underline" href="<?php echo DOMAIN_TAGS . $tagKey; ?>">
<?php echo $tagName; ?>
</a>
<?php endforeach ?>
</div>
<?php endif ?>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</article>
<?php endforeach ?>
</div>
<!-- Pagination -->
<?php if (Paginator::numberOfPages() > 1) : ?>
<nav class="flex justify-between items-center py-8 border-t border-gray-200 dark:border-gray-800">
<div>
<?php if (Paginator::showPrev()) : ?>
<a href="<?php echo htmlspecialchars(Paginator::previousPageUrl(), ENT_QUOTES, 'UTF-8') ?>" class="inline-flex items-center text-sm font-medium text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 no-underline transition-colors">
&larr; <?php echo $L->get('Previous'); ?>
</a>
<?php endif; ?>
</div>
<div>
<?php if (Paginator::showNext()) : ?>
<a href="<?php echo htmlspecialchars(Paginator::nextPageUrl(), ENT_QUOTES, 'UTF-8') ?>" class="inline-flex items-center text-sm font-medium text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 no-underline transition-colors">
<?php echo $L->get('Next'); ?> &rarr;
</a>
<?php endif; ?>
</div>
</nav>
<?php endif ?>
+26
View File
@@ -0,0 +1,26 @@
<header class="border-b border-gray-200 dark:border-gray-800">
<div class="max-w-2xl mx-auto px-4 py-6 flex items-center justify-between">
<a href="<?php echo Theme::siteUrl() ?>" class="text-xl font-bold text-gray-900 dark:text-white hover:text-accent-600 dark:hover:text-accent-400 transition-colors no-underline">
<?php echo $site->title() ?>
</a>
<nav class="flex items-center gap-6 text-sm">
<?php if ($site->homepage()): ?>
<a class="text-gray-600 dark:text-gray-400 hover:text-accent-600 dark:hover:text-accent-400 transition-colors no-underline <?php echo ($WHERE_AM_I === 'blog') ? 'font-semibold text-accent-600 dark:text-accent-400' : '' ?>" href="<?php echo DOMAIN_BASE . ltrim($url->filters('blog'), '/') ?>">
<?php echo $L->get('Blog') ?>
</a>
<?php endif; ?>
<?php foreach ($staticContent as $staticPage) : ?>
<a class="text-gray-600 dark:text-gray-400 hover:text-accent-600 dark:hover:text-accent-400 transition-colors no-underline <?php echo ($url->slug() == $staticPage->slug()) ? 'font-semibold text-accent-600 dark:text-accent-400' : '' ?>" href="<?php echo $staticPage->permalink() ?>">
<?php echo $staticPage->title() ?>
</a>
<?php endforeach ?>
<?php foreach (Theme::socialNetworks() as $key => $label) : ?>
<a class="text-gray-400 hover:text-accent-600 dark:hover:text-accent-400 transition-colors no-underline" href="<?php echo $site->{$key}(); ?>" target="_blank" rel="noopener" title="<?php echo $label ?>">
<?php echo $label ?>
</a>
<?php endforeach; ?>
</nav>
</div>
</header>
+96
View File
@@ -0,0 +1,96 @@
<article class="py-8">
<!-- Load Bludit Plugins: Page Begin -->
<?php Theme::plugins('pageBegin'); ?>
<?php if (!$page->isStatic() && !$url->notFound()): ?>
<!-- Breadcrumb navigation -->
<nav aria-label="Breadcrumb" class="mb-6">
<ol class="flex items-center text-sm text-gray-500 dark:text-gray-400 gap-1.5">
<li>
<a href="<?php echo Theme::siteUrl(); ?>" class="hover:text-accent-600 dark:hover:text-accent-400 no-underline transition-colors">
<?php echo $site->title(); ?>
</a>
</li>
<?php if ($page->categoryKey()): ?>
<li class="flex items-center gap-1.5">
<span aria-hidden="true">/</span>
<a href="<?php echo $page->categoryPermalink(); ?>" class="hover:text-accent-600 dark:hover:text-accent-400 no-underline transition-colors">
<?php echo $page->category(); ?>
</a>
</li>
<?php endif; ?>
<li class="flex items-center gap-1.5">
<span aria-hidden="true">/</span>
<span class="text-gray-700 dark:text-gray-300 font-medium truncate max-w-[200px]" aria-current="page">
<?php echo $page->title(); ?>
</span>
</li>
</ol>
</nav>
<!-- Date and reading time -->
<div class="mb-4">
<time class="text-sm text-gray-500 dark:text-gray-400" datetime="<?php echo $page->dateRaw(); ?>">
<?php echo $page->date(); ?>
</time>
<span class="text-sm text-gray-400 dark:text-gray-500 mx-2">&middot;</span>
<span class="text-sm text-gray-500 dark:text-gray-400">
<?php echo $page->readingTime(); ?> <?php echo $L->get('read'); ?>
</span>
<?php if ($page->user('nickname')): ?>
<span class="text-sm text-gray-400 dark:text-gray-500 mx-2">&middot;</span>
<span class="text-sm text-gray-500 dark:text-gray-400">
<?php echo $page->user('nickname'); ?>
</span>
<?php endif; ?>
</div>
<?php endif ?>
<!-- Title -->
<h1 class="text-3xl font-bold text-gray-900 dark:text-white mb-6 leading-tight">
<?php echo $page->title(); ?>
</h1>
<!-- Cover image -->
<?php if ($page->coverImage()): ?>
<figure class="mb-8 rounded-lg overflow-hidden">
<img class="w-full h-auto" alt="<?php echo $page->title(); ?>" src="<?php echo $page->coverImage(); ?>" loading="lazy" />
</figure>
<?php endif ?>
<!-- Full content -->
<div class="prose-content text-gray-700 dark:text-gray-300 leading-relaxed">
<?php echo $page->content(); ?>
</div>
<!-- Tags and Category -->
<?php $tagsList = $page->tags(true); $categoryKey = $page->categoryKey(); ?>
<?php if (!empty($tagsList) || $categoryKey) : ?>
<footer class="flex flex-wrap gap-2 mt-8 pt-6 border-t border-gray-200 dark:border-gray-800">
<?php if ($categoryKey) : ?>
<a class="inline-block text-xs font-medium px-2.5 py-1 rounded-full bg-accent-100 text-accent-700 dark:bg-accent-900 dark:text-accent-300 hover:bg-accent-200 dark:hover:bg-accent-800 transition-colors no-underline" href="<?php echo $page->categoryPermalink(); ?>">
<?php echo $page->category(); ?>
</a>
<?php endif ?>
<?php foreach ($tagsList as $tagKey => $tagName) : ?>
<a class="inline-block text-xs font-medium px-2.5 py-1 rounded-full bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors no-underline" href="<?php echo DOMAIN_TAGS . $tagKey; ?>">
<?php echo $tagName; ?>
</a>
<?php endforeach ?>
</footer>
<?php endif ?>
<!-- Back to home -->
<?php if (!$page->isStatic()) : ?>
<div class="mt-8 pt-6 border-t border-gray-200 dark:border-gray-800">
<a href="<?php echo Theme::siteUrl(); ?>" class="inline-flex items-center text-sm font-medium text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 no-underline transition-colors">
&larr; <?php echo $L->get('Back to home'); ?>
</a>
</div>
<?php endif ?>
<!-- Load Bludit Plugins: Page End -->
<?php Theme::plugins('pageEnd'); ?>
</article>
+159
View File
@@ -0,0 +1,159 @@
/* COMMON */
a {
color: #495057;
text-decoration: none;
}
a:hover {
color: #0a58ca;
}
img {
max-width: 100%;
}
pre, code {
color: #f8f8f8;
background-color: #495057;
}
code {
display: inline;
padding: 0.2em 0.4em;
line-height: 1.4;
border-radius: 3px;
box-decoration-break: clone;
-webkit-box-decoration-break: clone;
}
pre {
overflow-x: auto;
padding: 1.6rem 2.2rem;
line-height: 1.5;
border-radius: 5px !important;
}
/* BOOTSTRAP */
.list-group-item {
background-color: inherit;
}
.badge {
font-size: 0.875rem;
font-weight: 400;
}
.bi {
margin-right: .5rem!important;
}
.btn:focus,
.form-control:focus,
.form-select:focus {
outline: none !important;
box-shadow: none !important;
}
/* PAGE */
section.page {
font-size: 1.1rem;
}
section.page .page-description {
font-style: italic;
}
section.page a {
color: #0a58ca;
}
section.page p {
margin-bottom: 1.2rem;
}
section.page h1.page-title {
font-size: 2rem;
}
section.page h2 {
font-size: 1.5rem;
}
section.page h3 {
font-size: 1.3rem;
}
section.page h4 {
font-size: 1.1rem;
}
section.page h5 {
font-size: 1rem;
}
section.page h2,
section.page h3,
section.page h4,
section.page h5 {
margin: 2rem 0 1rem 0;
}
/* NAV LINKS */
.nav-links {
list-style: none;
display: flex;
flex-wrap: wrap;
gap: 0.5rem 1.25rem;
margin: 0;
padding: 0;
}
.nav-links a {
color: #495057;
}
.nav-links a:hover {
color: #0a58ca;
}
/* HOME */
.site-title {
font-size: clamp(1.8rem, 2.5vw, 2.6rem);
}
.list-group-item h5 {
font-size: 1.15rem;
}
/* FOOTER */
.footer-links {
list-style: none;
margin: 0;
padding: 0;
}
@media (max-width: 575.98px) {
section.page {
font-size: 1rem;
}
section.page h1.page-title {
font-size: 1.75rem;
}
}
/* VIDEO EMBED RESPONSIVE */
.video-embed {
overflow:hidden;
padding-bottom: 56.25%; /* 16:9 */
position:relative;
height:0;
}
.video-embed iframe{
left:0;
top:0;
height:100%;
width:100%;
position:absolute;
}
+20
View File
@@ -0,0 +1,20 @@
/* HELPERs */
.color-blue {
color: #0a58ca;
}
.color-light {
color: #495057;
}
.bold {
font-weight: 600;
}
.italic {
font-style: italic;
}
.bg-gray {
background-color: #ececec;
}
+50
View File
@@ -0,0 +1,50 @@
body {
background-color: #1C1C1E !important;
color: #b3b3b3 !important;
}
a {
color: #b3b3b3 !important;
}
a:hover {
color: #e2e2e2 !important
}
a.badge:hover {
color: #999 !important;
}
.form-text {
color: #989899 !important;
}
.bg-light {
background-color: #000 !important;
}
.color-blue {
color: #688bbd !important;
}
.btn-outline-primary {
color: #688bbd !important;
border-color: #688bbd !important;
}
.btn-outline-primary:hover {
background-color: #1C1C1E !important;
color: #fff !important;
}
.page-link {
color: #688bbd !important;
border-color: #688bbd !important;
background-color: #1C1C1E !important;
}
.form-control {
background-color: #1C1C1E !important;
border-color: #302F33 !important;
color: #b3b3b3 !important;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

+87
View File
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="<?php echo Theme::lang() ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="Bludit">
<!-- Generate <title>...</title> -->
<?php echo Theme::metaTagTitle(); ?>
<!-- Generate <meta name="description" content="..."> -->
<?php echo Theme::metaTagDescription(); ?>
<!-- Generate <link rel="icon" href="..."> -->
<?php echo Theme::favicon('img/favicon.png'); ?>
<!-- Include CSS Bootstrap file from Bludit Core -->
<?php echo Theme::cssBootstrap(); ?>
<!-- Include CSS Bootstrap ICONS file from Bludit Core -->
<?php echo Theme::cssBootstrapIcons(); ?>
<!-- Include CSS Styles -->
<?php
echo Theme::css(array(
'css/01-style.css',
'css/02-helpers.css'
));
# Apply the following CSS only for Dark Mode
if ($themePlugin->darkMode()) {
echo Theme::css(
'css/99-darkmode.css'
);
}
?>
<?php if ($themePlugin->googleFonts()) : ?>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap">
<style>
body {
font-family: "Open Sans", sans-serif;
}
</style>
<?php endif; ?>
<!-- Execute Bludit plugins for the hook "Site head" -->
<?php Theme::plugins('siteHead'); ?>
</head>
<body>
<!-- Execute Bludit plugins for the hook "Site body begin" -->
<?php Theme::plugins('siteBodyBegin'); ?>
<!-- Navbar -->
<?php include(THEME_DIR_PHP . 'navbar.php'); ?>
<!-- Content -->
<?php
// $WHERE_AM_I variable provides where the user is browsing
// If the user is watching a particular page the variable takes the value "page"
// If the user is watching the frontpage the variable takes the value "home"
// If the user is watching a particular category the variable takes the value "category"
if ($WHERE_AM_I == 'page') {
include(THEME_DIR_PHP . 'page.php');
} else {
include(THEME_DIR_PHP . 'home.php');
}
?>
<!-- Footer -->
<?php include(THEME_DIR_PHP . 'footer.php'); ?>
<!-- Include Jquery file from Bludit Core -->
<?php echo Theme::jquery(); ?>
<!-- Include javascript Bootstrap file from Bludit Core -->
<?php echo Theme::jsBootstrap(); ?>
<!-- Execute Bludit plugins for the hook "Site body end" -->
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
+5
View File
@@ -0,0 +1,5 @@
<?php defined('BLUDIT') or die('Bludit CMS.');
if ($themePlugin == false) {
exit("To ensure proper functionality, the theme requires the Popeye plugin. Activate the plugin through the admin panel.");
}

Some files were not shown because too many files have changed in this diff Show More