UNPKG

gentelella

Version:

Gentelella Admin is a free to use Bootstrap admin template

694 lines (496 loc) 197 kB
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <link rel="stylesheet" href="/gentelella/assets/css/just-the-docs-default.css"> <link rel="stylesheet" href="/gentelella/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet"> <style id="jtd-nav-activation"> .site-nav > ul.nav-list:first-child > li:not(:nth-child(7)) > a, .site-nav > ul.nav-list:first-child > li > ul > li a { background-image: none; } .site-nav > ul.nav-list:not(:first-child) a, .site-nav li.external a { background-image: none; } .site-nav > ul.nav-list:first-child > li:nth-child(7) > a { font-weight: 600; text-decoration: none; }.site-nav > ul.nav-list:first-child > li:nth-child(7) > button svg { transform: rotate(-90deg); }.site-nav > ul.nav-list:first-child > li.nav-list-item:nth-child(7) > ul.nav-list { display: block; } </style> <script src="/gentelella/assets/js/vendor/lunr.min.js"></script> <script src="/gentelella/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="/gentelella/favicon.ico" type="image/x-icon"> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>Customization Guide | Gentelella Admin Template</title> <meta name="generator" content="Jekyll v3.9.5" /> <meta property="og:title" content="Customization Guide" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="Modern Bootstrap 5 Admin Dashboard Template with Performance Optimizations" /> <meta property="og:description" content="Modern Bootstrap 5 Admin Dashboard Template with Performance Optimizations" /> <link rel="canonical" href="http://localhost:4000/gentelella/customization/" /> <meta property="og:url" content="http://localhost:4000/gentelella/customization/" /> <meta property="og:site_name" content="Gentelella Admin Template" /> <meta property="og:image" content="http://localhost:4000/gentelella/assets/images/gentelella-preview.jpg" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary_large_image" /> <meta property="twitter:image" content="http://localhost:4000/gentelella/assets/images/gentelella-preview.jpg" /> <meta property="twitter:title" content="Customization Guide" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"Modern Bootstrap 5 Admin Dashboard Template with Performance Optimizations","headline":"Customization Guide","image":"http://localhost:4000/gentelella/assets/images/gentelella-preview.jpg","url":"http://localhost:4000/gentelella/customization/"}</script> <!-- End Jekyll SEO tag --> </head> <body> <a class="skip-to-main" href="#main-content">Skip to main content</a> <svg xmlns="http://www.w3.org/2000/svg" class="d-none"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE --> <symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"> <title id="svg-external-link-title">(external link)</title> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md --> <symbol id="svg-copy" viewBox="0 0 16 16"> <title>Copy</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> </svg> </symbol> <symbol id="svg-copied" viewBox="0 0 16 16"> <title>Copied</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16"> <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/> </svg> </symbol> </svg> <div class="side-bar"> <div class="site-header" role="banner"> <a href="/gentelella/" class="site-title lh-tight"> Gentelella Admin Template </a> <button id="menu-button" class="site-button btn-reset" aria-label="Toggle menu" aria-pressed="false"> <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> </button> </div> <nav aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="/gentelella/" class="nav-list-link">Gentelella Admin Template Documentation</a></li><li class="nav-list-item"><a href="/gentelella/installation/" class="nav-list-link">Installation Guide</a></li><li class="nav-list-item"><a href="/gentelella/configuration/" class="nav-list-link">Configuration</a></li><li class="nav-list-item"><a href="/gentelella/components/" class="nav-list-link">Components Guide</a></li><li class="nav-list-item"><a href="/gentelella/performance/" class="nav-list-link">Performance Guide</a></li><li class="nav-list-item"><a href="/gentelella/deployment/" class="nav-list-link">Deployment Guide</a></li><li class="nav-list-item"><a href="/gentelella/customization/" class="nav-list-link">Customization Guide</a></li><li class="nav-list-item"><a href="/gentelella/api-integration/" class="nav-list-link">API Integration</a></li></ul> </nav> <footer class="site-footer"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </footer> </div> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search" role="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Gentelella Admin Template" aria-label="Search Gentelella Admin Template" autocomplete="off"> <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label> </div> <div id="search-results" class="search-results"></div> </div> <nav aria-label="Auxiliary" class="aux-nav"> <ul class="aux-nav-list"> <li class="aux-nav-list-item"> <a href="//github.com/puikinsh/gentelella" class="site-button" > Gentelella on GitHub </a> </li> <li class="aux-nav-list-item"> <a href="//colorlib.com" class="site-button" > Colorlib </a> </li> </ul> </nav> </div> <div class="main-content-wrap"> <div id="main-content" class="main-content"> <main> <h1 class="no_toc" id="customization-guide"> <a href="#customization-guide" class="anchor-heading" aria-labelledby="customization-guide"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Customization Guide </h1> <p class="fs-6 fw-300">Learn how to customize and extend Gentelella Admin Template to match your brand and requirements</p> <h2 class="no_toc text-delta" id="table-of-contents"> <a href="#table-of-contents" class="anchor-heading" aria-labelledby="table-of-contents"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Table of contents </h2> <ol id="markdown-toc"> <li><a href="#branding-and-theming" id="markdown-toc-branding-and-theming">Branding and Theming</a> <ol> <li><a href="#color-scheme-customization" id="markdown-toc-color-scheme-customization">Color Scheme Customization</a> <ol> <li><a href="#primary-colors" id="markdown-toc-primary-colors">Primary Colors</a></li> <li><a href="#dark-theme-support" id="markdown-toc-dark-theme-support">Dark Theme Support</a></li> <li><a href="#theme-toggle-implementation" id="markdown-toc-theme-toggle-implementation">Theme Toggle Implementation</a></li> </ol> </li> <li><a href="#logo-and-branding" id="markdown-toc-logo-and-branding">Logo and Branding</a> <ol> <li><a href="#custom-logo-implementation" id="markdown-toc-custom-logo-implementation">Custom Logo Implementation</a></li> </ol> </li> <li><a href="#typography-customization" id="markdown-toc-typography-customization">Typography Customization</a> <ol> <li><a href="#custom-font-integration" id="markdown-toc-custom-font-integration">Custom Font Integration</a></li> </ol> </li> </ol> </li> <li><a href="#layout-customization" id="markdown-toc-layout-customization">Layout Customization</a> <ol> <li><a href="#sidebar-modifications" id="markdown-toc-sidebar-modifications">Sidebar Modifications</a> <ol> <li><a href="#collapsible-sidebar" id="markdown-toc-collapsible-sidebar">Collapsible Sidebar</a></li> <li><a href="#custom-menu-items" id="markdown-toc-custom-menu-items">Custom Menu Items</a></li> </ol> </li> <li><a href="#header-customization" id="markdown-toc-header-customization">Header Customization</a> <ol> <li><a href="#custom-navigation-bar" id="markdown-toc-custom-navigation-bar">Custom Navigation Bar</a></li> <li><a href="#search-functionality" id="markdown-toc-search-functionality">Search Functionality</a></li> </ol> </li> </ol> </li> <li><a href="#component-customization" id="markdown-toc-component-customization">Component Customization</a> <ol> <li><a href="#custom-dashboard-widgets" id="markdown-toc-custom-dashboard-widgets">Custom Dashboard Widgets</a> <ol> <li><a href="#widget-factory" id="markdown-toc-widget-factory">Widget Factory</a></li> <li><a href="#widget-configuration" id="markdown-toc-widget-configuration">Widget Configuration</a></li> </ol> </li> <li><a href="#form-builder" id="markdown-toc-form-builder">Form Builder</a> <ol> <li><a href="#dynamic-form-generator" id="markdown-toc-dynamic-form-generator">Dynamic Form Generator</a></li> </ol> </li> </ol> </li> <li><a href="#advanced-customization" id="markdown-toc-advanced-customization">Advanced Customization</a> <ol> <li><a href="#plugin-system" id="markdown-toc-plugin-system">Plugin System</a> <ol> <li><a href="#plugin-architecture" id="markdown-toc-plugin-architecture">Plugin Architecture</a></li> <li><a href="#example-plugin" id="markdown-toc-example-plugin">Example Plugin</a></li> </ol> </li> </ol> </li> <li><a href="#next-steps" id="markdown-toc-next-steps">Next Steps</a></li> </ol><hr /> <h2 id="branding-and-theming"> <a href="#branding-and-theming" class="anchor-heading" aria-labelledby="branding-and-theming"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Branding and Theming </h2> <h3 id="color-scheme-customization"> <a href="#color-scheme-customization" class="anchor-heading" aria-labelledby="color-scheme-customization"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Color Scheme Customization </h3> <h4 id="primary-colors"> <a href="#primary-colors" class="anchor-heading" aria-labelledby="primary-colors"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Primary Colors </h4> <p>Override Bootstrap variables in <code class="language-plaintext highlighter-rouge">src/scss/variables.scss</code>:</p> <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Brand colors</span> <span class="nv">$primary</span><span class="p">:</span> <span class="mh">#73879C</span><span class="p">;</span> <span class="c1">// Main brand color</span> <span class="nv">$secondary</span><span class="p">:</span> <span class="mh">#6c757d</span><span class="p">;</span> <span class="c1">// Secondary color</span> <span class="nv">$success</span><span class="p">:</span> <span class="mh">#26B99A</span><span class="p">;</span> <span class="c1">// Success actions</span> <span class="nv">$info</span><span class="p">:</span> <span class="mh">#3498DB</span><span class="p">;</span> <span class="c1">// Information</span> <span class="nv">$warning</span><span class="p">:</span> <span class="mh">#F39C12</span><span class="p">;</span> <span class="c1">// Warnings</span> <span class="nv">$danger</span><span class="p">:</span> <span class="mh">#E74C3C</span><span class="p">;</span> <span class="c1">// Errors</span> <span class="c1">// Sidebar colors</span> <span class="nv">$sidebar-bg</span><span class="p">:</span> <span class="mh">#2A3F54</span><span class="p">;</span> <span class="nv">$sidebar-text</span><span class="p">:</span> <span class="mh">#E7E7E7</span><span class="p">;</span> <span class="nv">$sidebar-text-hover</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span> <span class="nv">$sidebar-active-bg</span><span class="p">:</span> <span class="nv">$primary</span><span class="p">;</span> <span class="c1">// Dashboard colors</span> <span class="nv">$dashboard-bg</span><span class="p">:</span> <span class="mh">#F7F7F7</span><span class="p">;</span> <span class="nv">$card-bg</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span> <span class="nv">$card-border</span><span class="p">:</span> <span class="mh">#E6E9ED</span><span class="p">;</span> <span class="c1">// Text colors</span> <span class="nv">$text-primary</span><span class="p">:</span> <span class="mh">#73879C</span><span class="p">;</span> <span class="nv">$text-secondary</span><span class="p">:</span> <span class="mh">#ABB1B7</span><span class="p">;</span> <span class="nv">$text-dark</span><span class="p">:</span> <span class="mh">#566573</span><span class="p">;</span> </code></pre></div></div> <h4 id="dark-theme-support"> <a href="#dark-theme-support" class="anchor-heading" aria-labelledby="dark-theme-support"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Dark Theme Support </h4> <p>Create <code class="language-plaintext highlighter-rouge">src/scss/themes/_dark.scss</code>:</p> <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Dark theme variables</span> <span class="o">[</span><span class="nt">data-theme</span><span class="o">=</span><span class="s2">"dark"</span><span class="o">]</span> <span class="p">{</span> <span class="na">--bs-body-bg</span><span class="p">:</span> <span class="mh">#1a1a1a</span><span class="p">;</span> <span class="na">--bs-body-color</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span> <span class="na">--bs-card-bg</span><span class="p">:</span> <span class="mh">#2d2d2d</span><span class="p">;</span> <span class="na">--bs-border-color</span><span class="p">:</span> <span class="mh">#404040</span><span class="p">;</span> <span class="c1">// Sidebar dark theme</span> <span class="nc">.left_col</span> <span class="p">{</span> <span class="nl">background</span><span class="p">:</span> <span class="mh">#0F1419</span><span class="p">;</span> <span class="nc">.nav-link</span> <span class="p">{</span> <span class="nl">color</span><span class="p">:</span> <span class="mh">#CCCCCC</span><span class="p">;</span> <span class="k">&amp;</span><span class="nd">:hover</span> <span class="p">{</span> <span class="nl">color</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span> <span class="nl">background</span><span class="p">:</span> <span class="nf">rgba</span><span class="p">(</span><span class="m">255</span><span class="o">,</span> <span class="m">255</span><span class="o">,</span> <span class="m">255</span><span class="o">,</span> <span class="m">0</span><span class="mi">.1</span><span class="p">);</span> <span class="p">}</span> <span class="k">&amp;</span><span class="nc">.active</span> <span class="p">{</span> <span class="nl">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-primary</span><span class="p">);</span> <span class="nl">color</span><span class="p">:</span> <span class="mh">#ffffff</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// Cards and panels</span> <span class="nc">.x_panel</span> <span class="p">{</span> <span class="nl">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-card-bg</span><span class="p">);</span> <span class="nl">border</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-border-color</span><span class="p">);</span> <span class="nc">.x_title</span> <span class="p">{</span> <span class="nl">border-bottom</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-border-color</span><span class="p">);</span> <span class="nt">h2</span> <span class="p">{</span> <span class="nl">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-body-color</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// Tables</span> <span class="nc">.table</span> <span class="p">{</span> <span class="na">--bs-table-bg</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-card-bg</span><span class="p">);</span> <span class="na">--bs-table-border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-border-color</span><span class="p">);</span> <span class="nl">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-body-color</span><span class="p">);</span> <span class="p">}</span> <span class="c1">// Forms</span> <span class="nc">.form-control</span> <span class="p">{</span> <span class="nl">background-color</span><span class="p">:</span> <span class="mh">#3d3d3d</span><span class="p">;</span> <span class="nl">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-border-color</span><span class="p">);</span> <span class="nl">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-body-color</span><span class="p">);</span> <span class="k">&amp;</span><span class="nd">:focus</span> <span class="p">{</span> <span class="nl">background-color</span><span class="p">:</span> <span class="mh">#4d4d4d</span><span class="p">;</span> <span class="nl">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">bs-primary</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </code></pre></div></div> <h4 id="theme-toggle-implementation"> <a href="#theme-toggle-implementation" class="anchor-heading" aria-labelledby="theme-toggle-implementation"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Theme Toggle Implementation </h4> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// src/js/theme-toggle.js</span> <span class="kd">class</span> <span class="nx">ThemeToggle</span> <span class="p">{</span> <span class="kd">constructor</span><span class="p">()</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">getItem</span><span class="p">(</span><span class="dl">'</span><span class="s1">theme</span><span class="dl">'</span><span class="p">)</span> <span class="o">||</span> <span class="dl">'</span><span class="s1">light</span><span class="dl">'</span><span class="p">;</span> <span class="k">this</span><span class="p">.</span><span class="nx">init</span><span class="p">();</span> <span class="p">}</span> <span class="nx">init</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// Apply saved theme</span> <span class="nb">document</span><span class="p">.</span><span class="nx">documentElement</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">data-theme</span><span class="dl">'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span><span class="p">);</span> <span class="c1">// Create toggle button</span> <span class="k">this</span><span class="p">.</span><span class="nx">createToggleButton</span><span class="p">();</span> <span class="c1">// Listen for toggle events</span> <span class="nb">document</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">theme-toggle</span><span class="dl">'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">toggle</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="k">this</span><span class="p">));</span> <span class="p">}</span> <span class="nx">createToggleButton</span><span class="p">()</span> <span class="p">{</span> <span class="kd">const</span> <span class="nx">button</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">button</span><span class="dl">'</span><span class="p">);</span> <span class="nx">button</span><span class="p">.</span><span class="nx">className</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">btn btn-outline-secondary theme-toggle</span><span class="dl">'</span><span class="p">;</span> <span class="nx">button</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">dark</span><span class="dl">'</span> <span class="p">?</span> <span class="dl">'</span><span class="s1">&lt;i class="fa fa-sun"&gt;&lt;/i&gt;</span><span class="dl">'</span> <span class="p">:</span> <span class="dl">'</span><span class="s1">&lt;i class="fa fa-moon"&gt;&lt;/i&gt;</span><span class="dl">'</span><span class="p">;</span> <span class="nx">button</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">click</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="k">this</span><span class="p">.</span><span class="nx">toggle</span><span class="p">());</span> <span class="c1">// Add to navbar</span> <span class="kd">const</span> <span class="nx">navbar</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.navbar-nav</span><span class="dl">'</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="nx">navbar</span><span class="p">)</span> <span class="p">{</span> <span class="kd">const</span> <span class="nx">li</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">li</span><span class="dl">'</span><span class="p">);</span> <span class="nx">li</span><span class="p">.</span><span class="nx">className</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">nav-item</span><span class="dl">'</span><span class="p">;</span> <span class="nx">li</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">button</span><span class="p">);</span> <span class="nx">navbar</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">li</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="nx">toggle</span><span class="p">()</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">light</span><span class="dl">'</span> <span class="p">?</span> <span class="dl">'</span><span class="s1">dark</span><span class="dl">'</span> <span class="p">:</span> <span class="dl">'</span><span class="s1">light</span><span class="dl">'</span><span class="p">;</span> <span class="nb">document</span><span class="p">.</span><span class="nx">documentElement</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">data-theme</span><span class="dl">'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span><span class="p">);</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">setItem</span><span class="p">(</span><span class="dl">'</span><span class="s1">theme</span><span class="dl">'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span><span class="p">);</span> <span class="c1">// Update button icon</span> <span class="kd">const</span> <span class="nx">button</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.theme-toggle</span><span class="dl">'</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="nx">button</span><span class="p">)</span> <span class="p">{</span> <span class="nx">button</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">dark</span><span class="dl">'</span> <span class="p">?</span> <span class="dl">'</span><span class="s1">&lt;i class="fa fa-sun"&gt;&lt;/i&gt;</span><span class="dl">'</span> <span class="p">:</span> <span class="dl">'</span><span class="s1">&lt;i class="fa fa-moon"&gt;&lt;/i&gt;</span><span class="dl">'</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Trigger custom event</span> <span class="nb">document</span><span class="p">.</span><span class="nx">dispatchEvent</span><span class="p">(</span><span class="k">new</span> <span class="nx">CustomEvent</span><span class="p">(</span><span class="dl">'</span><span class="s1">theme-changed</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span> <span class="na">detail</span><span class="p">:</span> <span class="p">{</span> <span class="na">theme</span><span class="p">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span> <span class="p">}</span> <span class="p">}));</span> <span class="p">}</span> <span class="nx">getTheme</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">theme</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// Initialize theme toggle</span> <span class="k">new</span> <span class="nx">ThemeToggle</span><span class="p">();</span> </code></pre></div></div> <h3 id="logo-and-branding"> <a href="#logo-and-branding" class="anchor-heading" aria-labelledby="logo-and-branding"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Logo and Branding </h3> <h4 id="custom-logo-implementation"> <a href="#custom-logo-implementation" class="anchor-heading" aria-labelledby="custom-logo-implementation"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Custom Logo Implementation </h4> <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// src/scss/components/_logo.scss</span> <span class="nc">.site_title</span> <span class="p">{</span> <span class="nl">display</span><span class="p">:</span> <span class="n">flex</span><span class="p">;</span> <span class="nl">align-items</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span> <span class="nl">padding</span><span class="p">:</span> <span class="m">15px</span> <span class="m">20px</span><span class="p">;</span> <span class="nl">color</span><span class="p">:</span> <span class="nv">$sidebar-text</span><span class="p">;</span> <span class="nl">text-decoration</span><span class="p">:</span> <span class="nb">none</span><span class="p">;</span> <span class="nc">.logo</span> <span class="p">{</span> <span class="nl">width</span><span class="p">:</span> <span class="m">32px</span><span class="p">;</span> <span class="nl">height</span><span class="p">:</span> <span class="m">32px</span><span class="p">;</span> <span class="nl">margin-right</span><span class="p">:</span> <span class="m">10px</span><span class="p">;</span> <span class="nt">img</span> <span class="p">{</span> <span class="nl">width</span><span class="p">:</span> <span class="m">100%</span><span class="p">;</span> <span class="nl">height</span><span class="p">:</span> <span class="m">100%</span><span class="p">;</span> <span class="nl">object-fit</span><span class="p">:</span> <span class="n">contain</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="nc">.brand-text</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">18px</span><span class="p">;</span> <span class="nl">font-weight</span><span class="p">:</span> <span class="m">600</span><span class="p">;</span> <span class="nc">.brand-suffix</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">12px</span><span class="p">;</span> <span class="nl">font-weight</span><span class="p">:</span> <span class="m">400</span><span class="p">;</span> <span class="nl">opacity</span><span class="p">:</span> <span class="m">0</span><span class="mi">.8</span><span class="p">;</span> <span class="nl">display</span><span class="p">:</span> <span class="nb">block</span><span class="p">;</span> <span class="nl">line-height</span><span class="p">:</span> <span class="m">1</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// Responsive logo</span> <span class="k">@media</span> <span class="p">(</span><span class="n">max-width</span><span class="o">:</span> <span class="m">768px</span><span class="p">)</span> <span class="p">{</span> <span class="nc">.site_title</span> <span class="p">{</span> <span class="nc">.brand-text</span> <span class="p">{</span> <span class="nl">display</span><span class="p">:</span> <span class="nb">none</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </code></pre></div></div> <div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Update logo in HTML files --&gt;</span> <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"index.html"</span> <span class="na">class=</span><span class="s">"site_title"</span><span class="nt">&gt;</span> <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"logo"</span><span class="nt">&gt;</span> <span class="nt">&lt;img</span> <span class="na">src=</span><span class="s">"/images/logo.svg"</span> <span class="na">alt=</span><span class="s">"Your Brand"</span><span class="nt">&gt;</span> <span class="nt">&lt;/div&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">"brand-text"</span><span class="nt">&gt;</span> Your Brand <span class="nt">&lt;small</span> <span class="na">class=</span><span class="s">"brand-suffix"</span><span class="nt">&gt;</span>Admin Panel<span class="nt">&lt;/small&gt;</span> <span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;/a&gt;</span> </code></pre></div></div> <h3 id="typography-customization"> <a href="#typography-customization" class="anchor-heading" aria-labelledby="typography-customization"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Typography Customization </h3> <h4 id="custom-font-integration"> <a href="#custom-font-integration" class="anchor-heading" aria-labelledby="custom-font-integration"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Custom Font Integration </h4> <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// src/scss/base/_typography.scss</span> <span class="c1">// Import custom fonts</span> <span class="k">@import</span> <span class="sx">url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&amp;display=swap')</span><span class="p">;</span> <span class="c1">// Typography variables</span> <span class="nv">$font-family-base</span><span class="p">:</span> <span class="s1">'Inter'</span><span class="o">,</span> <span class="s1">'Segoe UI'</span><span class="o">,</span> <span class="n">Roboto</span><span class="o">,</span> <span class="nb">sans-serif</span><span class="p">;</span> <span class="nv">$font-family-heading</span><span class="p">:</span> <span class="s1">'Inter'</span><span class="o">,</span> <span class="s1">'Segoe UI'</span><span class="o">,</span> <span class="n">Roboto</span><span class="o">,</span> <span class="nb">sans-serif</span><span class="p">;</span> <span class="nv">$font-family-monospace</span><span class="p">:</span> <span class="s1">'SF Mono'</span><span class="o">,</span> <span class="n">Monaco</span><span class="o">,</span> <span class="s1">'Cascadia Code'</span><span class="o">,</span> <span class="nb">monospace</span><span class="p">;</span> <span class="c1">// Font sizes</span> <span class="nv">$font-size-xs</span><span class="p">:</span> <span class="m">0</span><span class="mi">.75rem</span><span class="p">;</span> <span class="c1">// 12px</span> <span class="nv">$font-size-sm</span><span class="p">:</span> <span class="m">0</span><span class="mi">.875rem</span><span class="p">;</span> <span class="c1">// 14px</span> <span class="nv">$font-size-base</span><span class="p">:</span> <span class="m">1rem</span><span class="p">;</span> <span class="c1">// 16px</span> <span class="nv">$font-size-lg</span><span class="p">:</span> <span class="m">1</span><span class="mi">.125rem</span><span class="p">;</span> <span class="c1">// 18px</span> <span class="nv">$font-size-xl</span><span class="p">:</span> <span class="m">1</span><span class="mi">.25rem</span><span class="p">;</span> <span class="c1">// 20px</span> <span class="c1">// Font weights</span> <span class="nv">$font-weight-light</span><span class="p">:</span> <span class="m">300</span><span class="p">;</span> <span class="nv">$font-weight-normal</span><span class="p">:</span> <span class="m">400</span><span class="p">;</span> <span class="nv">$font-weight-medium</span><span class="p">:</span> <span class="m">500</span><span class="p">;</span> <span class="nv">$font-weight-semibold</span><span class="p">:</span> <span class="m">600</span><span class="p">;</span> <span class="nv">$font-weight-bold</span><span class="p">:</span> <span class="m">700</span><span class="p">;</span> <span class="c1">// Line heights</span> <span class="nv">$line-height-tight</span><span class="p">:</span> <span class="m">1</span><span class="mi">.25</span><span class="p">;</span> <span class="nv">$line-height-normal</span><span class="p">:</span> <span class="m">1</span><span class="mi">.5</span><span class="p">;</span> <span class="nv">$line-height-relaxed</span><span class="p">:</span> <span class="m">1</span><span class="mi">.75</span><span class="p">;</span> <span class="c1">// Apply typography</span> <span class="nt">body</span> <span class="p">{</span> <span class="nl">font-family</span><span class="p">:</span> <span class="nv">$font-family-base</span><span class="p">;</span> <span class="nl">font-size</span><span class="p">:</span> <span class="nv">$font-size-base</span><span class="p">;</span> <span class="nl">font-weight</span><span class="p">:</span> <span class="nv">$font-weight-normal</span><span class="p">;</span> <span class="nl">line-height</span><span class="p">:</span> <span class="nv">$line-height-normal</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Headings</span> <span class="nt">h1</span><span class="o">,</span> <span class="nt">h2</span><span class="o">,</span> <span class="nt">h3</span><span class="o">,</span> <span class="nt">h4</span><span class="o">,</span> <span class="nt">h5</span><span class="o">,</span> <span class="nt">h6</span> <span class="p">{</span> <span class="nl">font-family</span><span class="p">:</span> <span class="nv">$font-family-heading</span><span class="p">;</span> <span class="nl">font-weight</span><span class="p">:</span> <span class="nv">$font-weight-semibold</span><span class="p">;</span> <span class="nl">line-height</span><span class="p">:</span> <span class="nv">$line-height-tight</span><span class="p">;</span> <span class="nl">margin-bottom</span><span class="p">:</span> <span class="m">0</span><span class="mi">.5em</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h1</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">2</span><span class="mi">.5rem</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h2</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">2rem</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h3</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">1</span><span class="mi">.75rem</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h4</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">1</span><span class="mi">.5rem</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h5</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">1</span><span class="mi">.25rem</span><span class="p">;</span> <span class="p">}</span> <span class="nt">h6</span> <span class="p">{</span> <span class="nl">font-size</span><span class="p">:</span> <span class="m">1rem</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Code and monospace</span> <span class="nt">code</span><span class="o">,</span> <span class="nt">pre</span> <span class="p">{</span> <span class="nl">font-family</span><span class="p">:</span> <span class="nv">$font-family-monospace</span><span class="p">;</span> <span class="p">}</span> </code></pre></div></div><hr /> <h2 id="layout-customization"> <a href="#layout-customization" class="anchor-heading" aria-labelledby="layout-customization"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Layout Customization </h2> <h3 id="sidebar-modifications"> <a href="#sidebar-modifications" class="anchor-heading" aria-labelledby="sidebar-modifications"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Sidebar Modifications </h3> <h4 id="collapsible-sidebar"> <a href="#collapsible-sidebar" class="anchor-heading" aria-labelledby="collapsible-sidebar"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Collapsible Sidebar </h4> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// src/js/sidebar.js</span> <span class="kd">class</span> <span class="nx">Sidebar</span> <span class="p">{</span> <span class="kd">constructor</span><span class="p">()</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">sidebar</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.left_col</span><span class="dl">'</span><span class="p">);</span> <span class="k">this</span><span class="p">.</span><span class="nx">mainContent</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.right_col</span><span class="dl">'</span><span class="p">);</span> <span class="k">this</span><span class="p">.</span><span class="nx">toggleBtn</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.sidebar-toggle</span><span class="dl">'</span><span class="p">);</span> <span class="k">this</span><span class="p">.</span><span class="nx">isCollapsed</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">getItem</span><span class="p">(</span><span class="dl">'</span><span class="s1">sidebar-collapsed</span><span class="dl">'</span><span class="p">)</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">true</span><span class="dl">'</span><span class="p">;</span> <span class="k">this</span><span class="p">.</span><span class="nx">init</span><span class="p">();</span> <span class="p">}</span> <span class="nx">init</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// Apply saved state</span> <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">isCollapsed</span><span class="p">)</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">collapse</span><span class="p">();</span> <span class="p">}</span> <span class="c1">// Create toggle button if it doesn't exist</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">toggleBtn</span><span class="p">)</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">createToggleButton</span><span class="p">();</span> <span class="p">}</span> <span class="c1">// Add event listeners</span> <span class="k">this</span><span class="p">.</span><span class="nx">toggleBtn</span><span class="p">?.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">click</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="k">this</span><span class="p">.</span><span class="nx">toggle</span><span class="p">());</span> <span class="c1">// Handle responsive behavior</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleResize</span><span class="p">();</span> <span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">resize</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleResize</span><span class="p">());</span> <span class="p">}</span> <span class="nx">createToggleButton</span><span class="p">()</span> <span class="p">{</span> <span class="kd">const</span> <span class="nx">button</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">button</span><span class="dl">'</span><span class="p">);</span> <span class="nx">button</span><span class="p">.</span><span class="nx">className</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">btn btn-link sidebar-toggle</span><span class="dl">'</span><span class="p">;</span> <span class="nx">button</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">&lt;i class="fa fa-bars"&gt;&lt;/i&gt;</span><span class="dl">'</span><span class="p">;</span> <span class="c1">// Add to navbar</span> <span class="kd">const</span> <span class="nx">navbar</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</