Skip to content

Instantly share code, notes, and snippets.

@TehPeGaSuS
Last active January 9, 2026 00:08
Show Gist options
  • Select an option

  • Save TehPeGaSuS/b6b81898038544a3165fd0f057bc5f95 to your computer and use it in GitHub Desktop.

Select an option

Save TehPeGaSuS/b6b81898038544a3165fd0f057bc5f95 to your computer and use it in GitHub Desktop.
Anope Light/Dark theme auto mode
@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400);
@import url(//fonts.googleapis.com/css?family=Port+Lligat+Slab);
/* ==========================================================================
CSS Variables - Theme Definitions
========================================================================== */
/* Light Theme (Default) */
:root {
/* Colors */
--bg-primary: #eee;
--bg-secondary: white;
--bg-pattern: url('/static/cubes.png');
--text-primary: #333;
--text-secondary: #666;
--link-color: #428BCA;
--link-hover: #0082D9;
--border-color: #ddd;
--shadow-color: rgba(0, 0, 0, 0.1);
--popover-shadow: rgba(0, 0, 0, 0.8);
--label-info-bg: #4EA4EE;
--label-info-hover: #428BCA;
--nav-active-bg: rgba(66, 139, 202, 0.1);
/* Button Colors */
--btn-primary-bg: #428BCA;
--btn-primary-border: #357EBD;
--btn-primary-color: white;
--btn-warning-bg: #F0AD4E;
--btn-warning-border: #EEA236;
--btn-warning-color: white;
/* Form Colors */
--form-control-bg: white;
--form-control-border: #ccc;
--form-control-color: #333;
--placeholder-color: #999;
/* Spacing */
--shadow-offset: 0 8px 6px -8px;
}
/* Dark Theme (System Preference) */
@media (prefers-color-scheme: dark) {
:root {
/* Theme Colors */
--bg-primary: #1a1a1a;
--bg-secondary: #2d2d2d;
--bg-pattern: url('/static/cubes.png');
--text-primary: #f0f0f0;
--text-secondary: #b0b0b0;
--link-color: #64a8e6;
--link-hover: #8bc1f4;
--border-color: #444;
--shadow-color: rgba(0, 0, 0, 0.3);
--popover-shadow: rgba(0, 0, 0, 0.9);
--label-info-bg: #2a6eb5;
--label-info-hover: #3a7ec5;
--nav-active-bg: rgba(100, 168, 230, 0.15);
/* Button Colors - KEEP SAME AS LIGHT THEME */
--btn-primary-bg: #428BCA;
--btn-primary-border: #357EBD;
--btn-primary-color: white;
--btn-warning-bg: #F0AD4E;
--btn-warning-border: #EEA236;
--btn-warning-color: white;
/* Form Colors */
--form-control-bg: #2d2d2d;
--form-control-border: #444;
--form-control-color: #f0f0f0;
--placeholder-color: #888;
}
}
/* ==========================================================================
Base Styles
========================================================================== */
*, html, body, h1, h2, h3, h4, div, p, span, a, button {
font-family: 'Open Sans', sans-serif;
color: var(--text-primary);
}
body {
background-color: var(--bg-primary);
background-image: var(--bg-pattern);
}
/* ==========================================================================
Layout Components
========================================================================== */
/* Front Pages */
#frontPages {
padding-top: 20px;
}
/* Headings */
h2 {
margin: 0 0 10px 0;
}
h4 {
margin-top: 30px;
}
/* Popovers */
.popover {
max-width: 450px;
-webkit-box-shadow: 0 1px 10px var(--popover-shadow);
box-shadow: 0 1px 10px var(--popover-shadow);
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
.popover-title {
background-color: var(--bg-primary);
border-bottom-color: var(--border-color);
color: var(--text-primary);
}
.popover-content {
color: var(--text-primary);
}
/* Labels */
.label {
font-size: 13px;
font-weight: normal;
}
.label-info {
background-color: var(--label-info-bg);
}
.label-info[href]:hover,
.label-info[href]:focus {
background-color: var(--label-info-hover);
}
/* Footer */
.footer {
margin-top: 20px;
color: var(--text-secondary);
}
/* ==========================================================================
Forms & Inputs
========================================================================== */
/* Login Form */
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
color: var(--text-primary);
}
.form-signin .checkbox {
font-weight: normal;
}
.form-signin .form-control {
position: relative;
font-size: 16px;
height: auto;
padding: 10px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background-color: var(--form-control-bg);
border-color: var(--form-control-border);
color: var(--form-control-color);
}
.form-signin .form-control:focus {
z-index: 2;
border-color: var(--link-color);
box-shadow: 0 0 0 3px rgba(66, 139, 202, 0.25);
}
/* Form Elements */
input,
select,
textarea {
background-color: var(--form-control-bg);
border-color: var(--form-control-border);
color: var(--form-control-color);
}
input:focus,
select:focus,
textarea:focus {
border-color: var(--link-color);
outline: none;
box-shadow: 0 0 0 3px rgba(100, 168, 230, 0.25);
}
/* Placeholder Styles (Light Theme) */
::placeholder {
color: var(--placeholder-color);
opacity: 1;
}
::-webkit-input-placeholder {
color: var(--placeholder-color);
opacity: 1;
}
::-moz-placeholder {
color: var(--placeholder-color);
opacity: 1;
}
:-ms-input-placeholder {
color: var(--placeholder-color);
opacity: 1;
}
:-moz-placeholder {
color: var(--placeholder-color);
opacity: 1;
}
/* ==========================================================================
Buttons
========================================================================== */
/* Primary Button (Sign In) */
.btn-primary {
background-color: var(--btn-primary-bg) !important;
border-color: var(--btn-primary-border) !important;
color: var(--btn-primary-color) !important;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #357EBD !important;
border-color: #2D6CA2 !important;
color: white !important;
}
/* Warning Button (Register) */
.btn-warning {
background-color: var(--btn-warning-bg) !important;
border-color: var(--btn-warning-border) !important;
color: var(--btn-warning-color) !important;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #EEA236 !important;
border-color: #EC971F !important;
color: white !important;
}
/* Default Button */
.btn-default {
background-color: var(--bg-secondary);
border-color: var(--border-color);
color: var(--text-primary);
}
.btn-default:hover,
.btn-default:focus {
background-color: var(--bg-primary);
border-color: var(--link-color);
color: var(--link-color);
}
/* ==========================================================================
Control Panel Components
========================================================================== */
/* Panels */
.panel {
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
.panel-default > .panel-heading {
background-color: var(--bg-primary);
border-color: var(--border-color);
color: var(--text-primary);
font-size: 24px;
}
.panel-body {
color: var(--text-primary);
}
/* Navigation Panel */
#navPanel {
margin: 0;
padding: 0;
}
/* Logged In Indicator */
#loggedIn {
margin: 15px 15px 0 0;
}
/* Tables */
.table {
color: var(--text-primary);
}
.table thead > tr:first-child > th,
.table tbody > tr:first-child > th,
.table tfoot > tr:first-child > th,
.table thead > tr:first-child > td,
.table tbody > tr:first-child > td,
.table tfoot > tr:first-child > td {
vertical-align: top;
border-top: 0;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
border-color: var(--border-color);
}
/* Table: Info */
#tableInfo td {
vertical-align: middle;
}
#tableInfo td:first-child {
font-weight: bold;
padding-right: 10px;
text-align: right;
width: 25%;
}
/* Table: Info Normal */
#tableInfoNorm td {
vertical-align: middle;
}
#tableInfoNorm td:first-child {
font-weight: bold;
padding-right: 10px;
}
/* Table: Info Memos */
#tableInfoMemos td {
vertical-align: top;
}
#tableInfoMemos td:first-child {
font-weight: bold;
padding-right: 10px;
}
#tableInfoMemos th small {
font-weight: normal;
}
/* Table: Access */
#tableAccess td {
vertical-align: middle;
}
#tableAccess td:first-child {
padding-right: 10px;
text-align: left;
}
#tableAccess td:last-child {
padding-right: 10px;
text-align: right;
}
#tableAccess th small {
font-weight: normal;
}
/* Channel List */
#channelList li {
margin-top: 10px;
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
/* ==========================================================================
Navigation
========================================================================== */
/* Navbar */
.navbar,
.well {
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
.navbar {
-webkit-box-shadow: var(--shadow-offset) var(--shadow-color);
-moz-box-shadow: var(--shadow-offset) var(--shadow-color);
box-shadow: var(--shadow-offset) var(--shadow-color);
}
.navbar-brand {
font-size: 25px;
color: var(--text-primary);
}
.navbar-brand,
.navbar-brand small {
font-family: 'Port Lligat Slab', serif;
color: var(--text-primary);
}
.navbar-default {
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
.navbar-default .navbar-nav > li > a {
color: var(--link-color);
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: var(--link-hover);
border-top: 3px solid var(--link-hover);
margin-top: -3px;
background-color: var(--bg-primary);
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
color: var(--link-color);
background-color: var(--nav-active-bg);
border-bottom-color: transparent;
}
.navbar-default .navbar-toggle {
border-color: var(--border-color);
}
.navbar-default .navbar-toggle .icon-bar {
background-color: var(--text-primary);
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: var(--bg-primary);
}
/* Wells */
.well {
background-color: var(--bg-secondary);
border-color: var(--border-color);
color: var(--text-primary);
}
/* ==========================================================================
Links
========================================================================== */
a {
color: var(--link-color);
}
a:hover,
a:focus {
color: var(--link-hover);
text-decoration: none;
}
/* ==========================================================================
Dark Theme Specific Styles
========================================================================== */
@media (prefers-color-scheme: dark) {
/* ========================================================================
Base Adjustments
======================================================================== */
/* Pattern Background */
body {
background-blend-mode: multiply;
}
/* ========================================================================
PLACEHOLDER FIX - Fix for "white until you type"
======================================================================== */
/* Aggressive placeholder styling */
::placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
::-webkit-input-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
::-moz-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
:-ms-input-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
:-moz-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
/* Target specific input types */
input::placeholder,
textarea::placeholder,
select::placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
/* Bootstrap form controls */
.form-control::placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
.form-control::-webkit-input-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
.form-control::-moz-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
.form-control:-ms-input-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
.form-control:-moz-placeholder {
color: var(--placeholder-color) !important;
opacity: 1 !important;
}
/* Empty vs filled input states */
input:placeholder-shown,
textarea:placeholder-shown {
color: var(--placeholder-color) !important;
}
input:not(:placeholder-shown),
textarea:not(:placeholder-shown) {
color: var(--form-control-color) !important;
}
/* ========================================================================
Input Box Fixes
======================================================================== */
/* Force dark backgrounds on all form elements */
input:not([type="checkbox"]):not([type="radio"]),
input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"],
input[type="search"],
input[type="tel"],
input[type="url"],
input[type="date"],
input[type="datetime"],
input[type="datetime-local"],
input[type="time"],
input[type="month"],
input[type="week"],
textarea,
select,
.form-control {
background-color: var(--form-control-bg) !important;
border-color: var(--form-control-border) !important;
color: var(--form-control-color) !important;
}
/* Login form specific fix */
.form-signin .form-control {
background-color: var(--form-control-bg) !important;
border-color: var(--form-control-border) !important;
color: var(--form-control-color) !important;
}
/* Search boxes */
input[type="search"],
.search-input,
.form-search input {
background-color: var(--form-control-bg) !important;
color: var(--form-control-color) !important;
}
/* Inline style overrides */
input[style*="background-color: white"],
input[style*="background-color:#fff"],
input[style*="background-color: #fff"],
input[style*="background: white"],
input[style*="background:#fff"],
input[style*="background: #fff"],
textarea[style*="background-color: white"],
textarea[style*="background-color:#fff"],
textarea[style*="background-color: #fff"],
select[style*="background-color: white"],
select[style*="background-color:#fff"],
select[style*="background-color: #fff"],
input[style*="background-color: #e8f0f3"],
input[style*="background-color:#e8f0f3"],
.form-control[style*="background-color: #e8f0f3"],
.form-control[style*="background-color:#e8f0f3"] {
background-color: var(--form-control-bg) !important;
}
/* Focus states */
input:focus,
textarea:focus,
select:focus,
.form-control:focus {
border-color: var(--link-color) !important;
background-color: var(--form-control-bg) !important;
color: var(--form-control-color) !important;
box-shadow: 0 0 0 3px rgba(100, 168, 230, 0.25) !important;
}
/* Focus placeholders */
input:focus::placeholder,
textarea:focus::placeholder,
.form-control:focus::placeholder {
color: #aaa !important;
}
/* ========================================================================
Hover State Fixes (#3C3C3C)
======================================================================== */
/* Table Rows */
.table-hover > tbody > tr:hover > td,
.table-hover > tbody > tr:hover > th {
background-color: #3C3C3C !important;
}
/* List Group Items */
.list-group-item {
background-color: var(--bg-secondary) !important;
}
.list-group-item:hover,
.list-group-item:focus {
background-color: #3C3C3C !important;
}
/* Dropdown Items */
.dropdown-menu {
background-color: var(--bg-secondary);
border-color: var(--border-color);
}
.dropdown-menu > li > a {
background-color: transparent !important;
color: var(--text-primary) !important;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #3C3C3C !important;
color: var(--link-hover) !important;
}
/* Buttons */
.btn,
.btn-default {
background-color: var(--bg-secondary) !important;
border-color: var(--border-color) !important;
color: var(--text-primary) !important;
}
.btn:hover,
.btn:focus,
.btn-default:hover,
.btn-default:focus {
background-color: #3C3C3C !important;
border-color: var(--link-color) !important;
color: var(--link-hover) !important;
}
/* Primary Buttons - KEEP BLUE (#428bca) */
.btn-primary {
background-color: var(--btn-primary-bg) !important;
border-color: var(--btn-primary-border) !important;
color: var(--btn-primary-color) !important;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #357EBD !important;
border-color: #2D6CA2 !important;
color: white !important;
}
/* Warning Buttons - KEEP ORANGE (#f0ad4e) */
.btn-warning {
background-color: var(--btn-warning-bg) !important;
border-color: var(--btn-warning-border) !important;
color: var(--btn-warning-color) !important;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #EEA236 !important;
border-color: #EC971F !important;
color: white !important;
}
/* Pagination */
.pagination > li > a,
.pagination > li > span {
background-color: var(--bg-secondary) !important;
border-color: var(--border-color) !important;
color: var(--link-color) !important;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
background-color: #3C3C3C !important;
border-color: var(--border-color) !important;
color: var(--link-hover) !important;
}
.pagination > .active > a,
.pagination > .active > span {
background-color: var(--nav-active-bg) !important;
border-color: var(--link-color) !important;
color: var(--link-color) !important;
}
/* Navigation Items */
.nav > li > a,
.nav-pills > li > a,
.nav-tabs > li > a {
background-color: transparent !important;
color: var(--link-color) !important;
}
.nav > li > a:hover,
.nav > li > a:focus,
.nav-pills > li > a:hover,
.nav-pills > li > a:focus,
.nav-tabs > li > a:hover,
.nav-tabs > li > a:focus {
background-color: #3C3C3C !important;
color: var(--link-hover) !important;
}
/* Active Navigation Items */
.nav-pills > li.active > a,
.nav-tabs > li.active > a {
background-color: var(--nav-active-bg) !important;
color: var(--link-color) !important;
}
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
background-color: var(--nav-active-bg) !important;
color: var(--link-color) !important;
}
/* Form Controls Hover */
.form-control:hover {
border-color: #555 !important;
background-color: var(--form-control-bg) !important;
}
/* ========================================================================
Specific Anope Elements
======================================================================== */
/* Channel List */
#channelList li {
background-color: var(--bg-secondary) !important;
border-color: var(--border-color) !important;
}
#channelList li:hover {
background-color: #3C3C3C !important;
border-color: #555 !important;
}
/* Table Cells */
#tableAccess tbody tr td,
#tableInfo tbody tr td,
#tableInfoNorm tbody tr td,
#tableInfoMemos tbody tr td {
background-color: transparent !important;
}
#tableAccess tbody tr:hover td,
#tableInfo tbody tr:hover td,
#tableInfoNorm tbody tr:hover td,
#tableInfoMemos tbody tr:hover td {
background-color: #3C3C3C !important;
}
/* ========================================================================
Element Protection (Never #3C3C3C by default)
======================================================================== */
.panel,
.well,
.modal-content,
.popover,
.alert,
.panel-heading,
.panel-body,
.navbar,
.footer,
.container,
.row,
.col-*,
[class*="col-"] {
background-color: var(--bg-secondary) !important;
}
.panel-default > .panel-heading {
background-color: var(--bg-primary) !important;
}
/* ========================================================================
Transitions
======================================================================== */
.table-hover > tbody > tr,
.list-group-item,
.btn,
.dropdown-menu > li > a,
.pagination > li > a,
.pagination > li > span,
.nav > li > a,
#channelList li {
transition: background-color 0.15s ease-in-out !important;
}
}
/* ==========================================================================
FIX: Browser autofill forcing white inputs (login / register)
========================================================================== */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
select:-webkit-autofill {
-webkit-text-fill-color: var(--form-control-color) !important;
-webkit-box-shadow: 0 0 0 1000px var(--form-control-bg) inset !important;
box-shadow: 0 0 0 1000px var(--form-control-bg) inset !important;
transition: background-color 9999s ease-in-out 0s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment