/*! * LuCI Bootstrap Theme * Material3 Mod by KawaiiHachimi * Copyright 2012 Nut & Bolt * By David Menting * Based on Bootstrap v1.4.0 * * Copyright 2011 Twitter, Inc * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ /* Variables * --------- */ :root { /* Bootstrap/LuCI derived color scales */ --background-color-delta-l-sign: -1; --background-color-h: 0; --background-color-s: 0%; --background-color-l: 100%; --background-color-high-hsl: var(--background-color-h), var(--background-color-s), var(--background-color-l); --background-color-high: hsl(var(--background-color-high-hsl)); --background-color-medium-hsl: var(--background-color-h), var(--background-color-s), calc(var(--background-color-l) + var(--background-color-delta-l-sign) * 2.35%); --background-color-medium: hsl(var(--background-color-medium-hsl)); --background-color-low-hsl: var(--background-color-h), var(--background-color-s), calc(var(--background-color-l) + var(--background-color-delta-l-sign) * 3.92%); --background-color-low: hsl(var(--background-color-low-hsl)); --text-color-delta-l-sign: 1; --text-color-h: 0; --text-color-s: 0%; --text-color-l: 0%; --text-color-highest-hsl: var(--text-color-h), var(--text-color-s), var(--text-color-l); --text-color-highest: hsl(var(--text-color-highest-hsl)); --text-color-high-hsl: var(--text-color-h), var(--text-color-s), calc(var(--text-color-l) + var(--text-color-delta-l-sign) * 25.1%); --text-color-high: hsl(var(--text-color-high-hsl)); --text-color-medium-hsl: var(--text-color-h), var(--text-color-s), calc(var(--text-color-l) + var(--text-color-delta-l-sign) * 50.2%); --text-color-medium: hsl(var(--text-color-medium-hsl)); --text-color-low-hsl: var(--text-color-h), var(--text-color-s), calc(var(--text-color-l) + var(--text-color-delta-l-sign) * 74.9%); --text-color-low: hsl(var(--text-color-low-hsl)); --border-color-delta-l-sign: -1; --border-color-h: var(--background-color-h); --border-color-s: var(--background-color-s); --border-color-l: var(--background-color-l); --border-color-high-hsl: var(--border-color-h), var(--border-color-s), calc(var(--border-color-l) + var(--border-color-delta-l-sign) * 20%); --border-color-high: var(--outline); --border-color-medium-hsl: var(--border-color-h), var(--border-color-s), calc(var(--border-color-l) + var(--border-color-delta-l-sign) * 13.33%); --border-color-medium: var(--outline-variant); --border-color-low-h: var(--border-color-h); --border-color-low-s: var(--border-color-s); --border-color-low-l: calc(var(--border-color-l) + var(--border-color-delta-l-sign) * 6.67%); --border-color-low-hsl: var(--border-color-low-h), var(--border-color-low-s), var(--border-color-low-l); --border-color-low: color-mix(in srgb, var(--outline-variant) 62%, var(--surface-container-low)); --primary-color-high: var(--primary); --primary-color-medium: var(--button-hover); --primary-color-low: var(--button-pressed); --on-primary-color: var(--on-primary); --error-color-high-rgb: var(--error-rgb); --error-color-high: var(--error); --error-color-medium: color-mix(in srgb, var(--error) 92%, var(--error-container)); --error-color-low: var(--error-container); --on-error-color: var(--on-error); --success-color-high-rgb: var(--success-rgb); --success-color-high: var(--success); --success-color-medium: color-mix(in srgb, var(--success) 92%, var(--success-container)); --success-color-low: var(--success-container); --on-success-color: var(--on-success); --warn-color-high: var(--warning); --warn-color-medium: color-mix(in srgb, var(--warning) 92%, var(--warning-container)); --warn-color-low: var(--warning-container); --on-warn-color: var(--on-warning); --focus-color-rgb: var(--primary-rgb); --disabled-opacity: .7; --material3-button-radius: 999px; --material3-control-radius: 15px; --material3-card-radius: 16px; --material3-card-background: var(--surface-container-low); --material3-card-shadow: 0 .5px 1.5px color-mix(in srgb, var(--outline) 18%, transparent), 0 0 1px color-mix(in srgb, var(--outline) 10%, transparent); --material3-header-height: 4rem; --material3-sidebar-width: 256px; --material3-content-max-width: 1180px; --material3-content-gutter: max(18px, calc((100vw - var(--material3-sidebar-width) - var(--material3-content-max-width)) / 2)); --material3-content-padding: 18px; --material3-shell-background: var(--surface); --material3-shell-foreground: var(--on-surface); --material3-shell-state: var(--surface-container); --material3-header-background: color-mix(in srgb, var(--material3-shell-background) 72%, transparent); --material3-header-scrolled-background: color-mix(in srgb, var(--material3-card-background) 72%, transparent); --material3-header-foreground: var(--material3-shell-foreground); --material3-header-state: var(--material3-shell-state); --material3-indicator-hover-background: var(--primary-container); --material3-indicator-hover-foreground: var(--on-primary-container); --material3-indicator-active-background: var(--secondary-container); --material3-indicator-active-foreground: var(--on-secondary-container); --material3-indicator-pressed-background: var(--primary); --material3-indicator-pressed-foreground: var(--on-primary); --material3-refresh-background: color-mix(in srgb, var(--primary-container) 56%, transparent); --material3-refresh-foreground: var(--text-color-high); --material3-refresh-active-background: color-mix(in srgb, var(--primary) 18%, var(--primary-container)); --material3-refresh-active-foreground: var(--on-primary); --material3-refresh-hover-background: color-mix(in srgb, var(--primary) 24%, var(--primary-container)); --material3-refresh-hover-foreground: var(--on-primary); --material3-refresh-pressed-background: color-mix(in srgb, var(--primary) 30%, var(--primary-container)); --material3-refresh-pressed-foreground: var(--on-primary); --material3-menu-hover-background: color-mix(in srgb, var(--text-color-high) 7%, transparent); --material3-submenu-hover-background: color-mix(in srgb, var(--text-color-high) 5%, transparent); --material3-shell-shadow: color-mix(in srgb, var(--primary) 16%, transparent); --sidebar-width: var(--material3-sidebar-width); --header-height: var(--material3-header-height); --md-sys-color-surface: var(--material3-shell-background); --md-sys-color-surface-translucent: var(--material3-header-background); --md-sys-color-primary-container: color-mix(in srgb, var(--primary-container) 72%, var(--surface-container)); --md-sys-color-primary-container-hover: color-mix(in srgb, var(--primary) 6%, var(--md-sys-color-primary-container)); --md-sys-color-refresh-button: var(--material3-refresh-active-background); --md-sys-color-refresh-button-hover: var(--material3-refresh-hover-background); --md-sys-color-font: var(--on-surface); --md-sys-color-light: var(--on-primary); color-scheme: light; --font-sans: "Segoe UI Variable Display", "Google Sans", "Product Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Ubuntu, ui-sans-serif, system-ui, sans-serif; --font-mono: Monaco, Andale Mono, Courier New, ui-monospace, monospace; } /* Material 3 light palettes * -------------------------------------------------- */ /* 1. MD3 Baseline Purple - light */ :root, :root[data-theme="baseline"], :root[data-color-scheme="baseline"] { --primary: #6750A4; --primary-rgb: 103, 80, 164; --on-primary: #FFFFFF; --primary-container: #EADDFF; --on-primary-container: #21005D; --secondary: #625B71; --on-secondary: #FFFFFF; --secondary-container: #E8DEF8; --on-secondary-container: #1D192B; --tertiary: #7D5260; --on-tertiary: #FFFFFF; --tertiary-container: #FFD8E4; --on-tertiary-container: #31111D; --background: #FFFBFE; --on-background: #1C1B1F; --surface: #FFFBFE; --on-surface: #1C1B1F; --surface-container-low: #F7F2FA; --surface-container: #F3EDF7; --surface-container-high: #ECE6F0; --surface-variant: #E7E0EC; --on-surface-variant: #49454F; --outline: #79747E; --outline-variant: #CAC4D0; --error: #B3261E; --error-rgb: 179, 38, 30; --on-error: #FFFFFF; --error-container: #F9DEDC; --on-error-container: #410E0B; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #735EAB; --button-pressed: #7965AF; --background-color-h: 300; --background-color-s: 100%; --background-color-l: 99%; } /* 2. Trust Blue - light */ :root[data-theme="blue"], :root[data-color-scheme="blue"] { --primary: #0061A4; --primary-rgb: 0, 97, 164; --on-primary: #FFFFFF; --primary-container: #D1E4FF; --on-primary-container: #001D36; --secondary: #535F70; --on-secondary: #FFFFFF; --secondary-container: #D7E3F7; --on-secondary-container: #101C2B; --tertiary: #6B5778; --on-tertiary: #FFFFFF; --tertiary-container: #F2DAFF; --on-tertiary-container: #251431; --background: #FCFCFF; --on-background: #1A1C1E; --surface: #FCFCFF; --on-surface: #1A1C1E; --surface-container-low: #F2F3F7; --surface-container: #ECEEF2; --surface-container-high: #E6E8EC; --surface-variant: #DFE2EB; --on-surface-variant: #43474E; --outline: #73777F; --outline-variant: #C3C7CF; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #146EAB; --button-pressed: #1F74AF; --background-color-h: 240; --background-color-s: 100%; --background-color-l: 99%; } /* 3. Growth Green - light */ :root[data-theme="green"], :root[data-color-scheme="green"] { --primary: #006D3A; --primary-rgb: 0, 109, 58; --on-primary: #FFFFFF; --primary-container: #D5E8D4; --on-primary-container: #102014; --secondary: #526353; --on-secondary: #FFFFFF; --secondary-container: #D5E8D4; --on-secondary-container: #101F13; --tertiary: #39656F; --on-tertiary: #FFFFFF; --tertiary-container: #BDEAF6; --on-tertiary-container: #001F26; --background: #FBFDF7; --on-background: #191C19; --surface: #FBFDF7; --on-surface: #191C19; --surface-container-low: #F0F4ED; --surface-container: #EAEEE7; --surface-container-high: #E4E9E2; --surface-variant: #DDE5DA; --on-surface-variant: #414941; --outline: #717970; --outline-variant: #C1C9BF; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #14794A; --button-pressed: #1F7F52; --background-color-h: 80; --background-color-s: 60%; --background-color-l: 98%; } /* 4. Calm Teal - light */ :root[data-theme="teal"], :root[data-color-scheme="teal"] { --primary: #006A6A; --primary-rgb: 0, 106, 106; --on-primary: #FFFFFF; --primary-container: #CCE8E7; --on-primary-container: #051F1F; --secondary: #4A6363; --on-secondary: #FFFFFF; --secondary-container: #CCE8E7; --on-secondary-container: #051F1F; --tertiary: #4B607C; --on-tertiary: #FFFFFF; --tertiary-container: #D3E4FF; --on-tertiary-container: #041C35; --background: #FAFDFC; --on-background: #191C1C; --surface: #FAFDFC; --on-surface: #191C1C; --surface-container-low: #EFF4F3; --surface-container: #E9EFEE; --surface-container-high: #E3E9E8; --surface-variant: #DAE5E4; --on-surface-variant: #3F4948; --outline: #6F7978; --outline-variant: #BEC9C8; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #147676; --button-pressed: #1F7C7C; --background-color-h: 160; --background-color-s: 43%; --background-color-l: 99%; } /* 5. Warm Orange - light */ :root[data-theme="orange"], :root[data-color-scheme="orange"] { --primary: #8F4C00; --primary-rgb: 143, 76, 0; --on-primary: #FFFFFF; --primary-container: #FFDCBE; --on-primary-container: #2E1500; --secondary: #735A42; --on-secondary: #FFFFFF; --secondary-container: #FFDCBE; --on-secondary-container: #291806; --tertiary: #59633F; --on-tertiary: #FFFFFF; --tertiary-container: #DDE9B8; --on-tertiary-container: #171E03; --background: #FFFBFF; --on-background: #201A17; --surface: #FFFBFF; --on-surface: #201A17; --surface-container-low: #F8F0EA; --surface-container: #F2EAE4; --surface-container-high: #ECE4DE; --surface-variant: #F2DFD1; --on-surface-variant: #51443A; --outline: #837468; --outline-variant: #D5C3B5; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #985A14; --button-pressed: #9C611F; --background-color-h: 30; --background-color-s: 100%; --background-color-l: 99%; } /* 6. Vivid Orange - light */ :root[data-theme="vivid-orange"], :root[data-color-scheme="vivid-orange"] { --primary: #E85D04; --primary-rgb: 232, 93, 4; --on-primary: #FFFFFF; --primary-container: #FFDBC8; --on-primary-container: #321200; --secondary: #795847; --on-secondary: #FFFFFF; --secondary-container: #FFDBC8; --on-secondary-container: #2D160B; --tertiary: #665F2F; --on-tertiary: #FFFFFF; --tertiary-container: #EEE4A8; --on-tertiary-container: #201C00; --background: #FFFBFF; --on-background: #221A15; --surface: #FFFBFF; --on-surface: #221A15; --surface-container-low: #FAF0EA; --surface-container: #F4EAE4; --surface-container-high: #EEE4DE; --surface-variant: #F5DED2; --on-surface-variant: #53443B; --outline: #85746A; --outline-variant: #D8C3B7; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #F06C18; --button-pressed: #F27626; --background-color-h: 24; --background-color-s: 100%; --background-color-l: 99%; } /* 7. Sakura Red - light */ :root[data-theme="sakura"], :root[data-color-scheme="sakura"] { --primary: #BB1614; --primary-rgb: 187, 22, 20; --on-primary: #FFFFFF; --primary-container: #FFDAD6; --on-primary-container: #410002; --secondary: #775651; --on-secondary: #FFFFFF; --secondary-container: #FFDAD6; --on-secondary-container: #2C1512; --tertiary: #725B2E; --on-tertiary: #FFFFFF; --tertiary-container: #FFDEA6; --on-tertiary-container: #261900; --background: #FFFBFF; --on-background: #201A19; --surface: #FFFBFF; --on-surface: #201A19; --surface-container-low: #F9EFED; --surface-container: #F3E9E7; --surface-container-high: #EDE3E1; --surface-variant: #F5DDDA; --on-surface-variant: #534341; --outline: #857370; --outline-variant: #D8C2BE; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #C52A27; --button-pressed: #CB3531; --background-color-h: 6; --background-color-s: 100%; --background-color-l: 99%; } /* 8. Expressive Rose - light */ :root[data-theme="rose"], :root[data-color-scheme="rose"] { --primary: #BA1A46; --primary-rgb: 186, 26, 70; --on-primary: #FFFFFF; --primary-container: #FFD9DF; --on-primary-container: #400014; --secondary: #74565E; --on-secondary: #FFFFFF; --secondary-container: #FFD9DF; --on-secondary-container: #2B151B; --tertiary: #7C5635; --on-tertiary: #FFFFFF; --tertiary-container: #FFDCC2; --on-tertiary-container: #2E1500; --background: #FFFBFF; --on-background: #201A1B; --surface: #FFFBFF; --on-surface: #201A1B; --surface-container-low: #F9EFF1; --surface-container: #F3E9EB; --surface-container-high: #EDE3E5; --surface-variant: #F3DDE1; --on-surface-variant: #524346; --outline: #847376; --outline-variant: #D6C2C6; --error: #BA1A1A; --error-rgb: 186, 26, 26; --on-error: #FFFFFF; --error-container: #FFDAD6; --on-error-container: #410002; --success: #006D3A; --success-rgb: 0, 109, 58; --on-success: #FFFFFF; --success-container: #92F7B3; --on-success-container: #00210D; --warning: #8F4C00; --on-warning: #FFFFFF; --warning-container: #FFDCBE; --on-warning-container: #2E1500; --button-hover: #C02C55; --button-pressed: #C2355C; --background-color-h: 340; --background-color-s: 100%; --background-color-l: 99%; } /* 9. Monochrome Gray - light */ :root[data-theme="gray"], :root[data-color-scheme="gray"] { --primary: #3F3F46; --primary-rgb: 63, 63, 70; --on-primary: #FFFFFF; --primary-container: #E4E4E7; --on-primary-container: #18181B; --secondary: #52525B; --on-secondary: #FFFFFF; --secondary-container: #E4E4E7; --on-secondary-container: #18181B; --tertiary: #71717A; --on-tertiary: #FFFFFF; --tertiary-container: #F4F4F5; --on-tertiary-container: #27272A; --background: #FAFAFA; --on-background: #18181B; --surface: #FAFAFA; --on-surface: #18181B; --surface-container-low: #F4F4F5; --surface-container: #EDEDEF; --surface-container-high: #E4E4E7; --surface-variant: #E4E4E7; --on-surface-variant: #3F3F46; --outline: #71717A; --outline-variant: #D4D4D8; --error: #A23A3A; --error-rgb: 162, 58, 58; --on-error: #FFFFFF; --error-container: #F1D7D7; --on-error-container: #3B1111; --success: #3F7A52; --success-rgb: 63, 122, 82; --on-success: #FFFFFF; --success-container: #D8E7DC; --on-success-container: #102318; --warning: #9A6A2F; --on-warning: #FFFFFF; --warning-container: #EEE0CC; --on-warning-container: #2F1C04; --button-hover: #52525B; --button-pressed: #71717A; --background-color-h: 0; --background-color-s: 0%; --background-color-l: 98%; } /* Material 3 dark palettes * -------------------------------------------------- */ /* Common dark mode behavior */ :root[data-darkmode="true"], :root[data-mode="dark"] { --background-color-delta-l-sign: 1; --text-color-delta-l-sign: -1; --text-color-h: 0; --text-color-s: 0%; --text-color-l: 100%; --border-color-delta-l-sign: 1; --disabled-opacity: .4; --material3-refresh-background: color-mix(in srgb, var(--primary-container) 54%, transparent); --material3-refresh-foreground: var(--on-primary); --material3-refresh-active-background: color-mix(in srgb, var(--primary-container) 82%, var(--surface-container-high)); --material3-refresh-active-foreground: var(--on-primary); --material3-refresh-hover-background: color-mix(in srgb, var(--primary) 8%, var(--material3-refresh-active-background)); --material3-refresh-hover-foreground: var(--on-primary); --material3-refresh-pressed-background: color-mix(in srgb, #000 8%, var(--primary-container)); --material3-refresh-pressed-foreground: var(--on-primary); --material3-menu-hover-background: color-mix(in srgb, var(--text-color-high) 10%, transparent); --material3-submenu-hover-background: color-mix(in srgb, var(--text-color-high) 8%, transparent); color-scheme: dark; } /* 1. MD3 Baseline Purple - dark */ :root[data-darkmode="true"], :root[data-mode="dark"], :root[data-darkmode="true"][data-theme="baseline"], :root[data-mode="dark"][data-theme="baseline"], :root[data-darkmode="true"][data-color-scheme="baseline"], :root[data-mode="dark"][data-color-scheme="baseline"] { --primary: #D0BCFF; --primary-rgb: 208, 188, 255; --on-primary: #381E72; --primary-container: #4F378B; --on-primary-container: #EADDFF; --secondary: #CCC2DC; --on-secondary: #332D41; --secondary-container: #4A4458; --on-secondary-container: #E8DEF8; --tertiary: #EFB8C8; --on-tertiary: #492532; --tertiary-container: #633B48; --on-tertiary-container: #FFD8E4; --background: #1C1B1F; --on-background: #E6E1E5; --surface: #1C1B1F; --on-surface: #E6E1E5; --surface-container-low: #211F26; --surface-container: #2B2930; --surface-container-high: #36343B; --surface-variant: #49454F; --on-surface-variant: #CAC4D0; --outline: #938F99; --outline-variant: #49454F; --error: #F2B8B5; --error-rgb: 242, 184, 181; --on-error: #601410; --error-container: #8C1D18; --on-error-container: #F9DEDC; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #C4AFF4; --button-pressed: #BEA9EE; --background-color-h: 260; --background-color-s: 7%; --background-color-l: 11%; } /* 2. Trust Blue - dark */ :root[data-darkmode="true"][data-theme="blue"], :root[data-mode="dark"][data-theme="blue"], :root[data-darkmode="true"][data-color-scheme="blue"], :root[data-mode="dark"][data-color-scheme="blue"] { --primary: #9ECAFF; --primary-rgb: 158, 202, 255; --on-primary: #003258; --primary-container: #00497D; --on-primary-container: #D1E4FF; --secondary: #BBC7DB; --on-secondary: #253140; --secondary-container: #3B4858; --on-secondary-container: #D7E3F7; --tertiary: #D7BDE4; --on-tertiary: #3B2948; --tertiary-container: #523F5F; --on-tertiary-container: #F2DAFF; --background: #1A1C1E; --on-background: #E2E2E6; --surface: #1A1C1E; --on-surface: #E2E2E6; --surface-container-low: #1F2327; --surface-container: #282C31; --surface-container-high: #33373C; --surface-variant: #43474E; --on-surface-variant: #C3C7CF; --outline: #8D9199; --outline-variant: #43474E; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #91BEF2; --button-pressed: #8BB8EB; --background-color-h: 210; --background-color-s: 7%; --background-color-l: 11%; } /* 3. Growth Green - dark */ :root[data-darkmode="true"][data-theme="green"], :root[data-mode="dark"][data-theme="green"], :root[data-darkmode="true"][data-color-scheme="green"], :root[data-mode="dark"][data-color-scheme="green"] { --primary: #76DA99; --primary-rgb: 118, 218, 153; --on-primary: #00391A; --primary-container: #005229; --on-primary-container: #92F7B3; --secondary: #B9CCB8; --on-secondary: #253426; --secondary-container: #3B4B3B; --on-secondary-container: #D5E8D4; --tertiary: #A1CED9; --on-tertiary: #00363F; --tertiary-container: #1F4D57; --on-tertiary-container: #BDEAF6; --background: #191C19; --on-background: #E1E3DE; --surface: #191C19; --on-surface: #E1E3DE; --surface-container-low: #1E221E; --surface-container: #282C27; --surface-container-high: #323732; --surface-variant: #414941; --on-surface-variant: #C1C9BF; --outline: #8B9389; --outline-variant: #414941; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #6DCD8F; --button-pressed: #68C78A; --background-color-h: 120; --background-color-s: 6%; --background-color-l: 10%; } /* 4. Calm Teal - dark */ :root[data-darkmode="true"][data-theme="teal"], :root[data-mode="dark"][data-theme="teal"], :root[data-darkmode="true"][data-color-scheme="teal"], :root[data-mode="dark"][data-color-scheme="teal"] { --primary: #4CDADA; --primary-rgb: 76, 218, 218; --on-primary: #003737; --primary-container: #004F4F; --on-primary-container: #6FF7F6; --secondary: #B1CCCB; --on-secondary: #1C3534; --secondary-container: #334B4A; --on-secondary-container: #CCE8E7; --tertiary: #B3C8E8; --on-tertiary: #1C314B; --tertiary-container: #344863; --on-tertiary-container: #D3E4FF; --background: #191C1C; --on-background: #E0E3E2; --surface: #191C1C; --on-surface: #E0E3E2; --surface-container-low: #1E2222; --surface-container: #272D2D; --surface-container-high: #323737; --surface-variant: #3F4948; --on-surface-variant: #BEC9C8; --outline: #899392; --outline-variant: #3F4948; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #46CDCD; --button-pressed: #43C6C6; --background-color-h: 180; --background-color-s: 6%; --background-color-l: 10%; } /* 5. Warm Orange - dark */ :root[data-darkmode="true"][data-theme="orange"], :root[data-mode="dark"][data-theme="orange"], :root[data-darkmode="true"][data-color-scheme="orange"], :root[data-mode="dark"][data-color-scheme="orange"] { --primary: #FFB870; --primary-rgb: 255, 184, 112; --on-primary: #4C2700; --primary-container: #6D3900; --on-primary-container: #FFDCBE; --secondary: #E2C1A4; --on-secondary: #402C18; --secondary-container: #59422C; --on-secondary-container: #FFDCBE; --tertiary: #C1CD9E; --on-tertiary: #2C340F; --tertiary-container: #424B25; --on-tertiary-container: #DDE9B8; --background: #201A17; --on-background: #ECE0DA; --surface: #201A17; --on-surface: #ECE0DA; --surface-container-low: #271F1A; --surface-container: #312923; --surface-container-high: #3C332D; --surface-variant: #51443A; --on-surface-variant: #D5C3B5; --outline: #9E8E81; --outline-variant: #51443A; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #F1AC67; --button-pressed: #EAA763; --background-color-h: 20; --background-color-s: 16%; --background-color-l: 11%; } /* 6. Vivid Orange - dark */ :root[data-darkmode="true"][data-theme="vivid-orange"], :root[data-mode="dark"][data-theme="vivid-orange"], :root[data-darkmode="true"][data-color-scheme="vivid-orange"], :root[data-mode="dark"][data-color-scheme="vivid-orange"] { --primary: #FFB68B; --primary-rgb: 255, 182, 139; --on-primary: #512400; --primary-container: #BA4500; --on-primary-container: #FFDBC8; --secondary: #E8BEAA; --on-secondary: #442A1C; --secondary-container: #5F4030; --on-secondary-container: #FFDBC8; --tertiary: #D1C88E; --on-tertiary: #363107; --tertiary-container: #4E481C; --on-tertiary-container: #EEE4A8; --background: #221A15; --on-background: #EEE0D9; --surface: #221A15; --on-surface: #EEE0D9; --surface-container-low: #2A201A; --surface-container: #342A23; --surface-container-high: #40342D; --surface-variant: #53443B; --on-surface-variant: #D8C3B7; --outline: #A08D82; --outline-variant: #53443B; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #F4AA82; --button-pressed: #EEA37B; --background-color-h: 24; --background-color-s: 16%; --background-color-l: 11%; } /* 7. Sakura Red - dark */ :root[data-darkmode="true"][data-theme="sakura"], :root[data-mode="dark"][data-theme="sakura"], :root[data-darkmode="true"][data-color-scheme="sakura"], :root[data-mode="dark"][data-color-scheme="sakura"] { --primary: #FFB4AB; --primary-rgb: 255, 180, 171; --on-primary: #690005; --primary-container: #93000A; --on-primary-container: #FFDAD6; --secondary: #E7BDB7; --on-secondary: #442925; --secondary-container: #5D3F3B; --on-secondary-container: #FFDAD6; --tertiary: #DFC38C; --on-tertiary: #402D04; --tertiary-container: #594419; --on-tertiary-container: #FFDEA6; --background: #201A19; --on-background: #EDE0DE; --surface: #201A19; --on-surface: #EDE0DE; --surface-container-low: #271F1E; --surface-container: #312927; --surface-container-high: #3D3331; --surface-variant: #534341; --on-surface-variant: #D8C2BE; --outline: #A08C88; --outline-variant: #534341; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #F6A69D; --button-pressed: #EF9F96; --background-color-h: 6; --background-color-s: 12%; --background-color-l: 11%; } /* 8. Expressive Rose - dark */ :root[data-darkmode="true"][data-theme="rose"], :root[data-mode="dark"][data-theme="rose"], :root[data-darkmode="true"][data-color-scheme="rose"], :root[data-mode="dark"][data-color-scheme="rose"] { --primary: #FFB2BE; --primary-rgb: 255, 178, 190; --on-primary: #670025; --primary-container: #920034; --on-primary-container: #FFD9DF; --secondary: #E2BDC5; --on-secondary: #422930; --secondary-container: #5A3F46; --on-secondary-container: #FFD9DF; --tertiary: #EFBD94; --on-tertiary: #48290D; --tertiary-container: #623F20; --on-tertiary-container: #FFDCC2; --background: #201A1B; --on-background: #EBE0E1; --surface: #201A1B; --on-surface: #EBE0E1; --surface-container-low: #271F21; --surface-container: #31292B; --surface-container-high: #3C3335; --surface-variant: #524346; --on-surface-variant: #D6C2C6; --outline: #9F8C90; --outline-variant: #524346; --error: #FFB4AB; --error-rgb: 255, 180, 171; --on-error: #690005; --error-container: #93000A; --on-error-container: #FFDAD6; --success: #78D999; --success-rgb: 120, 217, 153; --on-success: #00391A; --success-container: #00522A; --on-success-container: #92F7B3; --warning: #FFB86C; --on-warning: #4A2800; --warning-container: #6D3900; --on-warning-container: #FFDCBE; --button-hover: #F3A4B2; --button-pressed: #ED9DAC; --background-color-h: 350; --background-color-s: 10%; --background-color-l: 11%; } /* 9. Monochrome Gray - dark */ :root[data-darkmode="true"][data-theme="gray"], :root[data-mode="dark"][data-theme="gray"], :root[data-darkmode="true"][data-color-scheme="gray"], :root[data-mode="dark"][data-color-scheme="gray"] { --primary: #D4D4D8; --primary-rgb: 212, 212, 216; --on-primary: #27272A; --primary-container: #3F3F46; --on-primary-container: #F4F4F5; --secondary: #D4D4D8; --on-secondary: #27272A; --secondary-container: #52525B; --on-secondary-container: #F4F4F5; --tertiary: #A1A1AA; --on-tertiary: #18181B; --tertiary-container: #3F3F46; --on-tertiary-container: #F4F4F5; --background: #18181B; --on-background: #E4E4E7; --surface: #18181B; --on-surface: #E4E4E7; --surface-container-low: #1F1F23; --surface-container: #27272A; --surface-container-high: #3F3F46; --surface-variant: #52525B; --on-surface-variant: #D4D4D8; --outline: #A1A1AA; --outline-variant: #52525B; --error: #E0A7A7; --error-rgb: 224, 167, 167; --on-error: #4A1616; --error-container: #743030; --on-error-container: #F1D7D7; --success: #A8CDB2; --success-rgb: 168, 205, 178; --on-success: #193521; --success-container: #315B3F; --on-success-container: #D8E7DC; --warning: #D6BB94; --on-warning: #3F290C; --warning-container: #72502A; --on-warning-container: #EEE0CC; --button-hover: #C4C4C8; --button-pressed: #B4B4B9; --background-color-h: 0; --background-color-s: 0%; --background-color-l: 10%; } /* Reset.less * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ * { scroll-margin-top: 40px; } *, *::before, *::after { margin: 0; padding: 0; border: 0; box-sizing: border-box; } abbr[title], acronym[title] { border-bottom: 1px dotted; font-weight: inherit; cursor: help; } table { border-collapse: collapse; border-spacing: 0; } ol, ul { list-style: none; } html { font-size: 100%; height: 100%; } a:focus { outline: thin dotted; } a:hover, a:active { outline: 0; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { -ms-interpolation-mode: bicubic; } button, input, select, option, textarea { font-size: 100%; margin: 0; box-sizing: border-box; vertical-align: baseline; line-height: 2em; } button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; /* nonstandard, should remove in future */ appearance: button; word-break: break-all; } button[disabled], input[type="button"][disabled], input[type="reset"][disabled], input[type="submit"][disabled] { opacity: var(--disabled-opacity); } input[type="search"] { -webkit-appearance: textfield; /* nonstandard, should remove in future */ appearance: textfield; box-sizing: content-box; } input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; /* nonstandard, should remove in future */ appearance: none; } textarea { overflow: auto; vertical-align: top; font-family: monospace; } .control-group { display: inline-flex; gap: .2em; } .control-group>input+ :not(input):not(select), .control-group>select+ :not(input):not(select) { padding: 0 10px; } /* * Scaffolding * Basic and global styles for generating a grid system, structural layout, and page templates * ------------------------------------------------------------------------------------------- */ body { background-color: var(--material3-shell-background); font-family: var(--font-sans); font-size: 13px; font-weight: normal; line-height: 18px; color: var(--text-color-high); padding: 0; min-height: 100%; display: flex; flex-direction: column; overflow-y: scroll; -webkit-tap-highlight-color: transparent; } a, button, input, select, textarea, label[for], .btn, .cbi-button, .cbi-dropdown, .menu-btn, header [data-indicator], .tabs a, .cbi-tabmenu a { touch-action: manipulation; } .container { width: 100%; max-width: 1180px; margin-left: auto; margin-right: auto; zoom: 1; } #maincontent { box-sizing: border-box; margin-left: calc(var(--material3-sidebar-width) + var(--material3-content-gutter)); margin-right: var(--material3-content-gutter); padding: 18px; overflow-x: auto; min-height: calc(100vh - var(--material3-header-height)); width: auto; max-width: none; background: var(--material3-shell-background); } a { color: var(--primary-color-high); text-decoration: none; line-height: inherit; font-weight: inherit; } a:hover { color: var(--primary-color-low); text-decoration: underline; } .pull-right { float: right; } .pull-left { float: left; } .nowrap:not(span) { /* Sometimes you need to wrap: badges on narrow screens look weird and nowrap defeats other width constraints, so exclude span */ white-space: nowrap; } /* Typography.less * Headings, body text, lists, code, and more for a versatile and durable typography system * ---------------------------------------------------------------------------------------- */ p, .cbi-map-descr, .cbi-section-descr, .table .tr.cbi-section-table-descr .th { font-size: 13px; font-weight: normal; line-height: 18px; margin-bottom: 9px; } p small { font-size: 11px; color: var(--text-color-low); } h1, h2, h3, legend, h4, h5, h6 { color: var(--text-color-high); } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { color: var(--text-color-low); } h1 { margin-bottom: 18px; font-size: 30px; line-height: 36px; } h1 small { font-size: 18px; } h2 { margin: 9px 0; font-size: 24px; font-weight: 350; line-height: 36px; } h2 small { font-size: 14px; } h3, legend, h4, h5, h6 { line-height: 36px; } h3, legend { font-size: 18px; font-weight: 350; color: var(--on-surface); } h3 small { font-size: 14px; } .cbi-title h3 { align-items: center; gap: 12px; } h4 { font-size: 16px; } h4 small { font-size: 12px; } h5 { font-size: 14px; } h6 { font-size: 13px; color: var(--text-color-low); text-transform: uppercase; } ul, ol { margin: 0 0 18px 25px; } ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } ul { list-style: disc; } ol { list-style: decimal; } li { line-height: 18px; color: var(--text-color-medium); } ul.unstyled { list-style: none; margin-left: 0; } dl { margin-bottom: 18px; } dl dt, dl dd { line-height: 18px; } dl dt { font-weight: bold; } dl dd { margin-left: 9px; } hr { margin: 20px 0 19px; border: 0; border-bottom: 1px solid var(--border-color-low); } strong { font-style: inherit; font-weight: bold; } em { font-style: italic; font-weight: inherit; line-height: inherit; } small { font-size: 0.9em } address { display: block; line-height: 18px; margin-bottom: 18px; } code, pre { padding: 0 3px 2px; font-family: var(--font-mono); font-size: 12px; border-radius: 3px; } code { background-color: var(--border-color-low); color: var(--text-color-high); padding: 1px 3px; } pre { --border-color-h: var(--background-color-h); --border-color-s: var(--background-color-s); --border-color-delta-l: 100%; --border-color-l: calc(var(--background-color-l) + var(--background-color-delta-l-sign) * var(--border-color-delta-l)); --border-color-a: 0.15; --border-color: hsla(var(--border-color-hsl), var(--border-color-a)); background-color: var(--background-color-low); display: block; padding: 8.5px; margin: 0 0 18px; line-height: 18px; font-size: 12px; border: 1px solid var(--border-color); border-radius: 3px; white-space: pre; white-space: pre-wrap; word-wrap: break-word; } /* Forms.less * Base styles for various input types, form layouts, and states * ------------------------------------------------------------- */ fieldset { margin-bottom: 9px; padding-top: 9px; } fieldset legend { display: block; font-size: 19.5px; line-height: 1; color: var(--text-color-high); padding-top: 20px; } label, input, button, select { font-family: var(--font-sans); font-size: 13px; font-weight: normal; line-height: normal; } .cbi-value { display: flex; flex-wrap: wrap; margin: 0; padding: 9px 0; align-items: baseline; } .cbi-value-field { margin-left: 20px; flex: 1; } .cbi-value label.cbi-value-title { padding-top: 6px; font-size: 13px; line-height: 18px; flex: 0 0 180px; text-align: right; color: var(--text-color-high); } .cbi-value[data-widget="CBI.FlagValue"]:has(> .cbi-value-field > .cbi-checkbox) { align-items: center; } .cbi-value[data-widget="CBI.FlagValue"]:has(> .cbi-value-field > .cbi-checkbox)>label.cbi-value-title { padding-top: 0; } .cbi-value>.cbi-section, .cbi-value>.cbi-tblsection { width: 100%; } label>input[type="checkbox"], label>input[type="radio"] { vertical-align: middle; margin: 0; } label[for] { cursor: pointer; } input, textarea, select, .cbi-select, .cbi-dropdown:not(.btn):not(.cbi-button) { display: inline-block; width: 210px; padding: 4px; background: var(--background-color-high); color: var(--text-color-high); font-size: 13px; line-height: 18px; border: 1px solid var(--border-color-high); border-radius: var(--material3-control-radius); } @media screen and (min-width: 768px) { #localtime { width: 300px; } } input, select, .cbi-select, .cbi-dropdown:not(.btn):not(.cbi-button) { height: 30px; } .cbi-dropdown:not(.btn):not(.cbi-button), .cbi-dynlist { min-width: 210px; max-width: 400px; width: auto; } .cbi-dynlist { height: auto; min-height: 30px; display: inline-flex; flex-direction: column; } .cbi-dynlist>.item { margin-bottom: 4px; box-shadow: 0 0 2px var(--border-color-high); background: var(--background-color-high); padding: 6px 2em 6px 4px; border: 1px solid var(--border-color-high); border-radius: var(--material3-control-radius); color: var(--text-color-high); position: relative; pointer-events: auto; /* needed for drag-and-drop in UIDynamicList */ overflow: hidden; word-break: break-all; cursor: move; /* drag-and-drop */ user-select: text; /* text selection in drag-and-drop */ } .cbi-dynlist>.item::after { content: "×"; position: absolute; display: inline-flex; align-items: center; top: -1px; right: -1px; bottom: -1px; padding: 0 8px; border: 0; border-radius: 0 var(--material3-control-radius) var(--material3-control-radius) 0; font-weight: bold; color: var(--error-color-high); pointer-events: auto; } /* indication line for drag-and-drop in UIDynamicList*/ .cbi-dynlist>.item.drag-over { border-top: 1px solid var(--text-color-highest); } /* Make item being dragged in UIDynamicList partially transparent*/ .cbi-dynlist>.item.dragging { opacity: 0.5; } /* prevent pointer changing when over the span element in UIDynamicList */ .cbi-dynlist>.item>span { pointer-events: none; } .cbi-dynlist>.add-item { display: flex; } /* indication line for drag-and-drop in UIDynamicList*/ .cbi-dynlist>.add-item>.cbi-input-text.drag-over { border-top: 1px solid var(--text-color-highest); } /* indication line for drag-and-drop in UIDynamicList*/ .cbi-dynlist>.add-item>.cbi-button-add.drag-over { border-top: 1px solid var(--text-color-highest); } .cbi-dynlist>.add-item>input, .cbi-dynlist>.add-item>button { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cbi-value-field>.cbi-checkbox, .cbi-value-field>div>.cbi-radio { height: 30px; display: inline-flex; align-items: center; } .cbi-radio { cursor: pointer; gap: .125em; } .cbi-select { padding: 0; position: relative; background: var(--background-color-high); } .cbi-select select, .cbi-select select:focus { -webkit-appearance: none; /* nonstandard, should remove in future */ appearance: none; outline: none; border: none; background: transparent; height: 100%; width: 100%; padding: 0 .3em; cursor: pointer; margin-right: .6em; } .cbi-select::before { position: absolute; top: 0; right: 0; bottom: 0; content: "▾"; padding: 0 .3em; background: var(--background-color-high); pointer-events: none; border-radius: 0 var(--material3-control-radius) var(--material3-control-radius) 0; display: flex; flex-direction: column; justify-content: center; } .cbi-select select option { background: var(--background-color-low); color: var(--text-color-high); } .cbi-select select option:hover { background: var(--primary-color-low); color: var(--on-primary-color); } .cbi-select select option:checked { background: var(--primary-color-medium); color: var(--on-primary-color); } input[type=file] { padding: initial; border: initial; line-height: initial; box-shadow: none; width: auto !important; } input[type=button], input[type=reset], input[type=submit] { width: auto; height: auto; } select[multiple] { height: inherit; background-color: #fff; } input[type="checkbox"], input[type="radio"] { --bd-color: var(--border-color-high); --fg-color: var(--text-color-high); -webkit-appearance: none; /* nonstandard, should remove in future */ appearance: none; width: 14px; height: 14px; color: var(--fg-color); position: relative; display: inline-block; cursor: pointer; background: none; border: none; } input[type="checkbox"]::before, input[type="checkbox"]::after, input[type="radio"]::before, input[type="radio"]::after { position: absolute; content: ""; } input[type="checkbox"]::before, input[type="radio"]::before { top: 0; left: 0; width: 14px; height: 14px; background: var(--background-color-high); border: 1px solid var(--bd-color); border-radius: 2px; } input[type="checkbox"] { --switch-track: var(--surface-container-high); --switch-thumb: var(--outline); --switch-checked-track: var(--primary); --switch-checked-thumb: var(--on-primary); width: 44px; height: 24px; vertical-align: middle; } input[type="checkbox"]::before { width: 44px; height: 24px; background: var(--switch-track); border: 1px solid var(--bd-color); border-radius: 12px; transition: background-color .2s ease, border-color .2s ease, box-shadow .2s ease; } input[type="checkbox"]:checked::before { background: var(--switch-checked-track); border-color: var(--switch-checked-track); } input[type="radio"], input[type="radio"]::before { border-radius: 50%; } input[type="radio"]::after { top: 2px; left: 2px; width: 10px; height: 10px; border-radius: 50%; transform: scale(0); transform-origin: center; transition: background-color .2s ease, transform .18s cubic-bezier(.2, 0, 0, 1); } input[type="checkbox"]:checked::after, input[type="radio"]:checked::after { --checkmark-icon: url("data:image/svg+xml,"); -webkit-mask: var(--checkmark-icon) center/cover no-repeat; mask: var(--checkmark-icon) center/cover no-repeat; background: var(--fg-color); } input[type="radio"]:checked:after { --checkmark-icon: url("data:image/svg+xml,"); transform: scale(1); } input[type="checkbox"]::after { top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: var(--switch-thumb); transition: transform .2s ease, background-color .2s ease; } input[type="checkbox"]:checked::after { -webkit-mask: none; mask: none; background: var(--switch-checked-thumb); transform: translateX(20px); } .cbi-checkbox { position: relative; } .cbi-checkbox input[type="checkbox"]+label { position: absolute; inset: 0; pointer-events: none; } .cbi-checkbox input[type="checkbox"]:checked+label::before { --switch-check-icon: url("data:image/svg+xml,"); content: ""; position: absolute; top: 50%; left: 32px; width: 10px; height: 10px; background: var(--primary); transform: translate(-50%, -50%); -webkit-mask: var(--switch-check-icon) center/contain no-repeat; mask: var(--switch-check-icon) center/contain no-repeat; } input[type="checkbox"].cbi-input-invalid, input[type="radio"].cbi-input-invalid { --bd-color: var(--error-color-medium); --fg-color: var(--error-color-high); } .td>input[type=text], .td>input[type=password], .td>select, .td>.cbi-dropdown:not(.btn):not(.cbi-button), .cbi-dynlist>.add-item>.cbi-dropdown { width: 100%; } ::placeholder { color: var(--text-color-medium); } .item::after, .btn, .cbi-button, .cbi-select, .cbi-dropdown, .cbi-dynlist>.item, input[type="checkbox"]::before, input[type="radio"]::before, input, button, textarea, select { transition: border linear 0.2s, box-shadow linear 0.2s; box-shadow: inset 0 1px 3px hsla(var(--border-color-low-hsl), .01); } .item:hover::after, .cbi-select.focus, .cbi-dropdown:focus, .cbi-dropdown[open], .cbi-dynlist>.item:focus, input[type="checkbox"]:focus::before, input[type="radio"]:focus::before, input:focus, textarea:focus, select:focus { outline: 0; border-color: rgba(var(--focus-color-rgb), 0.8) !important; box-shadow: inset 0 1px 3px hsla(var(--border-color-low-hsl), .01); text-decoration: none; } input[type="radio"]::before { transition: border-color .2s ease, background-color .2s ease, box-shadow .18s ease; box-shadow: 0 0 0 0 color-mix(in srgb, var(--text-color-high) 0%, transparent); } .cbi-radio:hover input[type="radio"]::before, label:hover > input[type="radio"]::before, input[type="radio"]:hover::before, input[type="radio"]:focus::before { box-shadow: 0 0 0 7px color-mix(in srgb, var(--text-color-high) 10%, transparent); } .btn:hover, .btn:focus, .cbi-button:hover, .cbi-button:focus, button:hover { outline: 0; border-color: rgba(var(--focus-color-rgb), 0.8) !important; box-shadow: inset 0 1px 3px hsla(var(--border-color-low-hsl), .01); text-decoration: none; } .cbi-input-invalid:focus, .cbi-select.cbi-input-invalid, input[type="checkbox"].cbi-input-invalid:focus::before, input[type="radio"].cbi-input-invalid:focus::before { --focus-color-rgb: var(--error-color-high-rgb); } input[disabled], button[disabled], select[disabled], textarea[disabled], .cbi-select[disabled]::before, .cbi-dropdown[disabled]:not(.btn):not(.cbi-button), input[type="checkbox"][disabled]::before, input[type="checkbox"][disabled]::after, input[type="radio"][disabled]::before, input[type="radio"][disabled]::after { opacity: var(--disabled-opacity); pointer-events: none; cursor: default; } input[readonly], select[readonly], textarea[readonly] { border-color: color-mix(in srgb, var(--border-color-high) 82%, var(--background-color-high)); pointer-events: auto; cursor: auto; } .cbi-section-create { display: inline-flex; align-items: center; } .cbi-section-create>* { margin: 3px; flex: 1 1 auto; } .cbi-section-create>*>input { width: 100%; } .actions, .cbi-page-actions { background: transparent; margin-bottom: 18px; padding: 17px 20px 18px 17px; border-top: 0; border-radius: 0 0 var(--material3-card-radius) var(--material3-card-radius); text-align: right; } .actions .secondary-action, .cbi-page-actions .secondary-action { float: right; } .actions .secondary-action a, .cbi-page-actions .secondary-action a { line-height: 30px; } .actions .secondary-action a:hover, .cbi-page-actions .secondary-action a:hover { text-decoration: underline; } .cbi-page-actions>form { display: inline; margin: 0; } /* * Tables.less * Tables for, you guessed it, tabular data * ---------------------------------------- */ .tr { display: table-row; } .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } .table { display: table; width: 100%; margin-bottom: 18px; padding: 0; font-size: 13px; border-collapse: collapse; position: relative; } .table .th, .table .td { display: table-cell; vertical-align: middle; /* Fixme */ padding: 10px 10px 9px; color: var(--on-surface-variant); font-size: 13px; font-weight: 400; line-height: 18px; text-align: left; } .table .tr:first-child .th { padding-top: 9px; font-weight: bold; vertical-align: top; } .table .td, .table .th { border-top: 0; } .table .tr:first-child .td, .table .tr:first-child .th { border-top: 0; } .tr.placeholder { height: calc(3em + 20px); } .tr.placeholder>.td { position: absolute; left: 0; right: 0; bottom: 0; text-align: center; line-height: 3em; } .tr.drag-over-above, .tr.drag-over-below { border: 2px solid var(--primary-color-high); border-width: 2px 0 0 0; } .tr.drag-over-below { border-width: 0 0 2px 0; } /* Patterns.less * Repeatable UI elements outside the base styles provided from the scaffolding * ---------------------------------------------------------------------------- */ header { position: sticky; top: 0; z-index: 800; overflow: visible; height: var(--material3-header-height); color: var(--material3-header-foreground); margin: 0; display: flex; align-items: center; backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); } header a { color: color-mix(in srgb, var(--material3-header-foreground) 78%, var(--material3-header-background)); text-shadow: none; } header .brand:hover { color: var(--primary); text-decoration: none; } header .brand { float: left; display: block; box-sizing: border-box; width: var(--material3-sidebar-width); padding: 0; margin: 0; color: var(--material3-header-foreground); font-size: 25px; font-weight: 400; line-height: 40px; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: color .3s ease; } header .pull-right { margin-left: auto; margin-right: 12px; align-self: center; } header p { margin: 0; line-height: 40px; } header { background: var(--material3-header-background); box-shadow: none; transition: background-color .3s, box-shadow .3s; padding: 0; } header.with-shadow { background: var(--material3-header-scrolled-background); box-shadow: 0 .5px 1.5px 0 rgba(0, 0, 0, 19%), 0 0 1px 0 rgba(0, 0, 0, 3.9%); } body.sidebar-open header { background: var(--material3-shell-background); } .menu-btn { display: none; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; margin-left: .5rem; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--material3-header-foreground); cursor: pointer; } .menu-btn:hover { background: var(--material3-header-state); border-color: transparent !important; box-shadow: none !important; } .menu-btn:focus { border-color: transparent !important; box-shadow: none !important; outline: none; } .menu-btn:focus-visible { outline: 2px solid color-mix(in srgb, var(--primary) 46%, transparent); outline-offset: -2px; } .menu-btn span, .menu-btn span::before, .menu-btn span::after { display: block; width: 20px; height: 0.1rem; border-radius: 0.05rem; background: currentColor; transition: transform .3s ease, opacity .3s ease; } .menu-btn span { position: relative; } .menu-btn span::before, .menu-btn span::after { content: ''; position: absolute; left: 0; } .menu-btn span::before { transform: translateY(-6px); } .menu-btn span::after { transform: translateY(6px); } .menu-btn.active span { background: transparent; } .menu-btn.active span::before { transform: rotate(45deg); } .menu-btn.active span::after { transform: rotate(-45deg); } .sidebar { position: sticky; height: calc(100vh - var(--material3-header-height)); margin-bottom: calc(var(--material3-header-height) - 100vh); top: var(--material3-header-height); left: 0; bottom: 0; z-index: 820; box-sizing: border-box; width: var(--material3-sidebar-width); padding: 0; overflow-y: auto; background: var(--md-sys-color-surface); border-right: 0; font-size: 1rem; transition: transform .3s; } .sidebar-overlay { position: fixed; top: var(--material3-header-height); right: 0; bottom: 0; left: 0; z-index: 740; display: block; background: rgba(0, 0, 0, .5); opacity: 0; visibility: hidden; transition: .3s; } @media screen and (max-width: 854px) { #maincontent { margin-left: 0; margin-right: 0; max-width: none; padding: 12px; } footer { width: 100%; padding-left: 12px; padding-right: 12px; } header { justify-content: center; } header .brand { position: absolute; left: 50%; width: calc(100% - 160px); max-width: 360px; transform: translateX(-50%); } header .pull-right { position: relative; z-index: 1; } .menu-btn { position: relative; z-index: 1; display: inline-flex; } .sidebar { position: fixed; height: auto; float: none; margin-bottom: 0; transform: translateX(-100%); z-index: 900; border-radius: 0 1rem 1rem 0; } .sidebar.active { transform: translateX(0); } .sidebar-overlay { z-index: 800; } .sidebar-overlay.active { opacity: 1; visibility: visible; } .cbi-dropdown[open]:not(.btn):not(.cbi-button), .cbi-dropdown[open]:not(.btn):not(.cbi-button)>ul.dropdown { max-width: 100%; } .cbi-dropdown[open]:not(.btn):not(.cbi-button)>ul.dropdown { box-sizing: border-box; width: 100%; min-width: 100%; } } .cbi-dropdown[open].btn>ul.dropdown, .cbi-dropdown[open].cbi-button>ul.dropdown { left: 0 !important; right: auto !important; width: max-content; max-width: calc(100vw - 24px); min-width: 100%; } .nav { display: flex; flex-direction: column; float: none; gap: 0; margin: 0; padding: 1rem; position: relative; left: 0; } .nav>li { display: block; float: none; width: 100%; border-radius: 2rem; } .nav>li>a { display: flex; align-items: center; gap: 0; float: none; box-sizing: border-box; padding: 1rem 1.5rem; line-height: 18px; text-decoration: none; border-radius: 2rem; color: var(--text-color-high); overflow: hidden; position: relative; transition: .3s; } .nav-menu-title { display: block; flex: 1 1 auto; min-width: 0; overflow: hidden; white-space: nowrap; -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 24px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 24px), transparent); } .nav a:hover>.nav-menu-title, .nav a:focus>.nav-menu-title { -webkit-mask-image: none; mask-image: none; } .nav>li>a::before { content: ''; width: 1.5rem; height: 1.5rem; margin-right: 1rem; background-color: var(--text-color-medium); -webkit-mask: url("icons/other.svg") center/contain no-repeat; mask: url("icons/other.svg") center/contain no-repeat; transition: background-color .3s; } .nav>li.dropdown>a::after { content: ''; width: .5rem; height: .5rem; border-right: 2px solid var(--text-color-medium); border-bottom: 2px solid var(--text-color-medium); margin-left: auto; transition: transform .3s; opacity: 1; transform: rotate(45deg); } .nav>li[data-path="admin/status"]>a::before { -webkit-mask: url("icons/status.svg") center/contain no-repeat; mask: url("icons/status.svg") center/contain no-repeat; } .nav>li[data-path="admin/dashboard"]>a::before { -webkit-mask: url("icons/dashboard.svg") center/contain no-repeat; mask: url("icons/dashboard.svg") center/contain no-repeat; } .nav>li[data-path="admin/system"]>a::before { -webkit-mask: url("icons/system.svg") center/contain no-repeat; mask: url("icons/system.svg") center/contain no-repeat; } .nav>li[data-path="admin/services"]>a::before { -webkit-mask: url("icons/services.svg") center/contain no-repeat; mask: url("icons/services.svg") center/contain no-repeat; } .nav>li[data-path="admin/network"]>a::before { -webkit-mask: url("icons/network.svg") center/contain no-repeat; mask: url("icons/network.svg") center/contain no-repeat; } .nav>li[data-path="admin/nas"]>a::before, .nav>li[data-path="admin/storage"]>a::before { -webkit-mask: url("icons/nas.svg") center/contain no-repeat; mask: url("icons/nas.svg") center/contain no-repeat; } .nav>li[data-path="admin/docker"]>a::before { -webkit-mask: url("icons/docker.svg") center/contain no-repeat; mask: url("icons/docker.svg") center/contain no-repeat; } .nav>li[data-path="admin/modem"]>a::before { -webkit-mask: url("icons/modem.svg") center/contain no-repeat; mask: url("icons/modem.svg") center/contain no-repeat; } .nav>li[data-path="admin/vpn"]>a::before { -webkit-mask: url("icons/vpn.svg") center/contain no-repeat; mask: url("icons/vpn.svg") center/contain no-repeat; } .nav>li[data-path="admin/logout"]>a::before { -webkit-mask: url("icons/logout.svg") center/contain no-repeat; mask: url("icons/logout.svg") center/contain no-repeat; } .nav>li.active>a::before, .nav>li>a:hover::before { background-color: var(--text-color-highest); } .nav>li.active>a, .nav>li>a:hover { color: var(--text-color-highest); text-decoration: none; } .nav>li>a:hover { background: var(--material3-menu-hover-background); } .nav a:focus { outline: none; } .nav a:focus-visible { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--primary) 42%, transparent); } .nav>li.active>a { background-color: transparent; } .nav .dropdown-menu { position: static !important; float: none; height: 0; min-width: 100%; margin: 0; padding: 0; border-radius: 0; overflow: hidden; background: var(--md-sys-color-surface-translucent); border: 0; box-shadow: none; transition: height .3s ease-in-out; } .nav>li>.dropdown-menu { padding-left: 2.5rem; } .nav>li.open>.dropdown-menu { display: block; background: transparent; } .nav .dropdown-menu>li { position: relative; border-radius: 2rem; transition: background-color .3s; } .nav .dropdown-menu>li:hover { background: var(--material3-submenu-hover-background); border-radius: 2rem; } .nav .dropdown-menu>li.active { background: var(--md-sys-color-primary-container); transition: background-color .3s; } .nav .dropdown-menu>li.active:hover { background: var(--md-sys-color-primary-container-hover); } .nav .dropdown-menu>li>a { box-sizing: border-box; position: relative; color: var(--text-color-medium); transition: .3s; padding: 1rem 1.5rem; line-height: 18px; display: flex; align-items: center; border-radius: 2rem; overflow: hidden; text-shadow: none; } .nav .dropdown-menu li a:hover { border-radius: 2rem; background: transparent !important; color: var(--text-color-highest) !important; } .nav .dropdown-menu>li.active>a { color: var(--on-primary-container); } li.menu, .dropdown { position: relative; } .nav>li.dropdown.open>a::after { transform: rotate(225deg); } .nav>li:has(> .dropdown-menu > li.active) { border-radius: 2rem 2rem 0 0; } .nav>li:has(> .dropdown-menu > li.active)>a { color: var(--text-color-highest) !important; } @media (hover: none), (pointer: coarse), (any-pointer: coarse) { .nav>li:not(.active)>a:hover { background: transparent; color: var(--text-color-high); } .nav>li:not(.active)>a:hover::before { background-color: var(--text-color-medium); } .nav>li:not(.active)>a:hover::after { border-color: var(--text-color-medium); } .nav .dropdown-menu>li:not(.active):hover { background: transparent; } .nav .dropdown-menu>li:not(.active)>a:hover { color: var(--text-color-medium) !important; } .nav a:hover>.nav-menu-title { -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 24px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 24px), transparent); } } .ripple { position: absolute; width: 200px; height: 200px; margin-left: -100px; margin-top: -100px; border-radius: 50%; background: rgba(0, 0, 0, .15); pointer-events: none; transform: scale(0); animation: ripple 1s ease-out; } @keyframes ripple { from { opacity: 1; transform: scale(0); } to { opacity: 0; transform: scale(2.5); } } [data-darkmode="true"] .ripple, [data-mode="dark"] .ripple { background: rgba(255, 255, 255, .15); } .dropdown-menu { background-color: var(--surface-container-low); float: left; position: absolute; top: 40px; left: -9999px; z-index: 900; min-width: max-content; margin-left: 0; margin-right: 0; padding: 6px 0; zoom: 1; border-color: var(--outline-variant); border-style: solid; border-width: 0 1px 1px; border-radius: 0 0 6px 6px; box-shadow: 0 2px 4px color-mix(in srgb, var(--outline) 18%, transparent); background-clip: padding-box; } .dropdown-menu li { float: none; display: block; background-color: transparent; } .dropdown-menu a { display: block; padding: 4px 15px; clear: both; font-weight: normal; line-height: 18px; color: var(--on-surface-variant); text-shadow: none; } .dropdown-menu a:hover { background-color: var(--surface-container); background-repeat: repeat-x; background-image: none; color: var(--on-surface); text-decoration: none; } .dropdown:hover ul.dropdown-menu { left: 0; } .dropdown-menu .dropdown-menu { position: absolute; left: 159px; } .dropdown-menu li { position: relative; } .tabs, .cbi-tabmenu { --tab-bar-background-color: var(--material3-card-background); --tab-inactive-text-color: var(--on-surface-variant); --tab-inactive-hover-background-color: var(--material3-menu-hover-background); --tab-active-background-color: var(--primary-container); --tab-active-text-color: var(--on-primary-container); margin: 5px 0; padding: 0; list-style: none; display: inline-flex; flex-wrap: wrap; justify-content: center; background: var(--tab-bar-background-color); border-radius: var(--material3-card-radius); } .tabs>li, .cbi-tabmenu>li { flex: 0 1 auto; display: flex; align-items: center; position: relative; overflow: hidden; height: 32px; max-width: none; margin: 0; padding: 0; background: var(--tab-active-background-color); border: 0; border-radius: var(--material3-card-radius); color: var(--tab-active-text-color); font-size: 14px; white-space: nowrap; transition: background-color .3s ease, color .3s ease; } .tabs>li>a, .cbi-tabmenu>li>a { padding: 0 16px; white-space: nowrap; color: inherit; text-decoration: none; border-radius: var(--material3-card-radius); outline: none; } .tabs>li>a:focus-visible, .cbi-tabmenu>li>a:focus-visible { text-decoration: underline; } .tabs>li:not(.active):hover, .cbi-tabmenu>.cbi-tab-disabled:hover { background: var(--tab-inactive-hover-background-color); } .tabs>li:not(.active), .cbi-tabmenu>.cbi-tab-disabled { color: var(--tab-inactive-text-color); background: transparent; } .cbi-tab-disabled[data-errors]::after { content: attr(data-errors); background: var(--error-color-high); color: var(--on-error-color); height: 16px; min-width: 16px; border-radius: 8px; text-align: center; margin: 0 5px 0 0; padding: 3px 2px 1px 2px; display: inline-flex; flex-direction: column; justify-content: center; font-size: 12px; } .cbi-tabmenu.map { margin: 0; } .cbi-tabmenu.map>li { font-size: 16.5px; font-weight: bold; } .cbi-tab-descr { margin: -9px 0 18px 0; } .tabs .menu-dropdown, .tabs .dropdown-menu { top: 35px; border-width: 1px; border-radius: 0 6px 6px 6px; } .tabs a.menu:after, .tabs .dropdown-toggle:after { border-top-color: var(--on-surface-variant); margin-top: 15px; margin-left: 5px; } .tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { border-color: var(--outline); } .tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after { border-top-color: var(--on-surface); } .tab-content>.tab-pane, .tab-content>div { display: none; } .tab-content>.active { display: block; } .breadcrumb { padding: 7px 14px; margin: 0 0 18px; background: var(--background-color-low); border: 1px solid var(--border-color-medium); border-radius: 3px; display: flex; flex: 0; } .breadcrumb li { list-style: none; } .breadcrumb li:not(:last-child)::after { content: "|"; padding: 0 5px; } .breadcrumb .active a { color: var(--text-color-medium); } footer { padding-top: 17px; margin-top: auto; box-sizing: border-box; border-top: 1px solid var(--border-color-low); display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; font-size: 12px; color: var(--text-color-medium); padding-left: calc(var(--material3-sidebar-width) + var(--material3-content-gutter) + var(--material3-content-padding)); padding-right: calc(var(--material3-content-gutter) + var(--material3-content-padding)); } footer a { color: var(--primary-color-low); } footer span { margin-bottom: 1em; } footer ul.breadcrumb { margin-left: auto; } @media screen and (max-width: 854px) { footer { width: 100%; padding-left: 12px; padding-right: 12px; } } #modal_overlay { position: fixed; top: 0; bottom: 0; background: rgba(0, 0, 0, .1); z-index: 900; overflow: auto; transition: opacity .125s ease-in; opacity: 0; visibility: hidden; } .modal { width: 90%; margin: 5em auto; min-height: 32px; max-width: 600px; border-radius: var(--material3-card-radius); background: color-mix(in srgb, var(--background-color-high) 94%, transparent); border: 1px solid var(--border-color-low); box-shadow: 0 0 3px var(--background-color-low); padding: 1em 1em .5em 1em; min-width: 270px; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .modal>* { line-height: normal; margin-bottom: .5em; max-width: 100%; } .modal>pre, .modal>textarea { white-space: pre-wrap; overflow: auto; width: 100%; border-radius: var(--material3-card-radius); } .modal>.button-row { display: flex; justify-content: space-between; flex-wrap: wrap; } .modal>.button-row>button:not(:last-of-type) { margin-right: .5em; } .modal>.button-row>button:first-of-type { margin-right: auto; } body.modal-overlay-active { overflow: hidden; height: 100vh; } body.modal-overlay-active #modal_overlay { left: 0; right: 0; opacity: 1; visibility: visible; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } #modal_overlay.login-overlay { display: flex; align-items: center; justify-content: center; padding: 24px; background: radial-gradient(circle at 18% 8%, color-mix(in srgb, var(--primary-container) 38%, transparent), transparent 28rem), linear-gradient(135deg, color-mix(in srgb, var(--background) 78%, var(--primary-container)) 0%, color-mix(in srgb, var(--background) 92%, var(--primary-container)) 46%, color-mix(in srgb, var(--surface-container-low) 88%, var(--primary)) 100%), linear-gradient(180deg, color-mix(in srgb, var(--surface-container-low) 48%, transparent) 0%, transparent 52%), var(--background); } #modal_overlay>.modal.login { width: 100%; min-width: 0; max-width: 420px; margin: 0; padding: 32px; border: 1px solid color-mix(in srgb, var(--outline-variant) 52%, transparent); border-radius: 28px; background: color-mix(in srgb, var(--material3-card-background) 78%, transparent); backdrop-filter: blur(24px) saturate(1.12); -webkit-backdrop-filter: blur(24px) saturate(1.12); box-shadow: 0 12px 36px color-mix(in srgb, var(--outline) 18%, transparent), 0 1px 1px color-mix(in srgb, var(--outline) 10%, transparent); color: var(--on-surface); } #modal_overlay>.modal.login>h4 { display: none; } .modal.login .material3-login-header { display: flex; align-items: center; gap: 16px; margin-bottom: 28px; } .modal.login .material3-login-header img { width: 72px; height: 72px; flex: 0 0 auto; } .modal.login .material3-login-header h2 { margin: 0; font-size: 24px; font-weight: 450; line-height: 1.25; color: var(--on-surface); } .modal.login .material3-login-header p { margin: 4px 0 0; color: var(--on-surface-variant); } .modal.login .cbi-map, .modal.login .cbi-section, .modal.login .cbi-section-node { margin: 0; padding: 0; background: transparent; border: 0; box-shadow: none; } .modal.login .cbi-value { display: block; margin-bottom: 16px; } .modal.login .cbi-value label.cbi-value-title { display: block; flex: none; padding: 0; margin-bottom: 8px; text-align: left; color: var(--on-surface-variant); font-weight: 450; } .modal.login .cbi-value-field { margin-left: 0; } .modal.login input { width: 100%; height: 44px; padding: 0 16px; background: var(--surface); border-color: color-mix(in srgb, var(--outline-variant) 72%, var(--surface)); color: var(--on-surface); } .modal.login input:focus { border-color: var(--primary) !important; box-shadow: inset 0 0 0 1px var(--primary); } .modal.login hr { display: none; } .modal.login .alert-message { margin: 2px 0 18px; padding: 10px 14px; border: 0; border-radius: 16px; background: var(--surface-container); color: var(--on-surface); box-shadow: none; white-space: normal; } .modal.login .alert-message.error { background: var(--error-container); color: var(--on-error-container); } .modal.login .alert-message.warning { background: var(--warning-container); color: var(--on-warning-container); } @media screen and (max-width: 480px) { #modal_overlay.login-overlay { padding: 16px; } #modal_overlay>.modal.login { padding: 24px; border-radius: 24px; } .modal.login .material3-login-header { gap: 12px; margin-bottom: 24px; } .modal.login .material3-login-header img { width: 64px; height: 64px; } .modal.login .material3-login-header h2 { font-size: 21px; } } .btn .close, .alert-message .close { font-family: var(--font-sans); line-height: 18px; } .btn.danger, .btn.error { background: var(--error-color-medium); color: var(--on-error-color); border-color: var(--error-color-high) var(--error-color-high) var(--error-color-low); } .alert-message.danger, .alert-message.error, .cbi-tooltip.error { background: var(--error-container); color: var(--on-error-container); border-color: color-mix(in srgb, var(--error) 28%, var(--error-container)); } .btn.success { background: var(--success-color-medium); color: var(--on-error-color); border-color: var(--success-color-high) var(--success-color-high) var(--success-color-low); } .alert-message.success, .cbi-tooltip.success { background: var(--success-container); color: var(--on-success-container); border-color: color-mix(in srgb, var(--success) 28%, var(--success-container)); } .btn.info { background: var(--primary-color-medium); color: var(--on-primary-color); border-color: var(--primary-color-high) var(--primary-color-high) var(--primary-color-low); } .alert-message.info, .cbi-tooltip.info { background: var(--primary-container); color: var(--on-primary-container); border-color: color-mix(in srgb, var(--primary) 28%, var(--primary-container)); } .alert-message.notice, .cbi-tooltip.notice { background: var(--surface-container); border-color: var(--outline-variant); color: var(--on-surface); } .alert-message.warning { background: var(--warning-container); border-color: color-mix(in srgb, var(--warning) 28%, var(--warning-container)); color: var(--on-warning-container); } .modal.alert-message { color: var(--text-color-high); } .btn, .cbi-button, .cbi-button-add { --default-btn-background: var(--background-color-high); --on-color: var(--text-color-high); cursor: pointer; display: inline-block; background: var(--default-btn-background); padding: 0 14px; color: var(--on-color); font-size: 13px; line-height: 2em; border: 1px solid var(--border-color-high); border-radius: var(--material3-button-radius); white-space: pre; } .cbi-input-invalid, .cbi-input-invalid.cbi-dropdown:not(.btn):not(.cbi-button), .cbi-input-invalid.cbi-dropdown:not([open])>ul>li, .cbi-value-error input { color: var(--error-color-high); border-color: var(--error-color-medium); } .cbi-button-positive, .cbi-button-fieldadd, .cbi-button-add, .cbi-button-save { --on-color: var(--success-color-high); border-color: var(--on-color); } .cbi-button-neutral, .cbi-button-download, .cbi-button-find, .cbi-button-link, .cbi-button-up, .cbi-button-down { color: var(--text-color-high); } .btn.primary, .cbi-button-action, .cbi-button-apply, .cbi-button-reload, .cbi-button-edit { --on-color: var(--primary-color-high); border-color: var(--on-color); } .cbi-button-negative, .cbi-section-remove .cbi-button, .cbi-button-reset, .cbi-button-remove { --on-color: var(--error-color-high); border-color: var(--on-color); } .cbi-page-actions::after { display: table; content: ""; clear: both; } .cbi-page-actions>* { vertical-align: middle; } .cbi-page-actions> :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-negative):not(.cbi-button-save):not(.cbi-button-reset) { float: left; margin-right: .4em; } .btn.primary, .cbi-button-action.important, .cbi-page-actions .cbi-button-apply, .cbi-section-actions .cbi-button-edit { --on-color: var(--on-primary); background: var(--primary); border-color: var(--primary); } .cbi-button-positive.important, .cbi-page-actions .cbi-button-save { --on-color: var(--on-secondary-container); background: var(--secondary-container); border-color: var(--secondary-container); } .cbi-button-negative.important { --on-color: var(--on-error-color); background: var(--error-color-medium); border-color: var(--error-color-high); } .cbi-page-actions .cbi-button-reset { --on-color: var(--primary); background: transparent; border-color: var(--outline); } .cbi-page-actions .cbi-button-apply+.cbi-button-save, .cbi-page-actions .cbi-button-negative+.cbi-button-save { --on-color: var(--on-secondary-container); border-color: var(--secondary-container); background: var(--secondary-container); } .cbi-page-actions .cbi-button-apply:hover, .cbi-page-actions .cbi-button-apply:focus { background: var(--button-hover); border-color: var(--button-hover); } .cbi-page-actions .cbi-button-apply:active { background: var(--button-pressed); border-color: var(--button-pressed); } .cbi-page-actions .cbi-button-save:hover, .cbi-page-actions .cbi-button-save:focus { background: color-mix(in srgb, var(--on-secondary-container) 8%, var(--secondary-container)); border-color: color-mix(in srgb, var(--on-secondary-container) 8%, var(--secondary-container)); } .cbi-page-actions .cbi-button-reset:hover, .cbi-page-actions .cbi-button-reset:focus { background: color-mix(in srgb, var(--primary) 8%, transparent); border-color: var(--outline); } .cbi-dropdown { display: inline-flex !important; cursor: pointer; height: auto; position: relative; padding: 0 !important; } .cbi-dropdown:not(.btn):not(.cbi-button) { background: var(--background-color-high); border: 1px solid var(--border-color-high); border-radius: var(--material3-control-radius); color: var(--text-color-high); } .cbi-dropdown img { /* the following are necessary to constrain (vector) images of any size */ max-height: 1.6em; /* Adjusts image height to fit slightly larger than text line height */ width: auto; /* Preserves aspect ratio */ } .cbi-dropdown>ul { margin: 0 !important; padding: 0; list-style: none; overflow-x: hidden; overflow-y: hidden; display: flex; width: 100%; } .cbi-dropdown.btn>ul:not(.dropdown), .cbi-dropdown.cbi-button>ul:not(.dropdown) { margin: 0 0 0 13px !important; } .cbi-dropdown.btn.spinning>ul:not(.dropdown), .cbi-dropdown.cbi-button.spinning>ul:not(.dropdown) { margin: 0 !important; } .cbi-dropdown>ul.preview { display: none; } .cbi-dropdown>.open, .cbi-dropdown>.more { flex-grow: 0; flex-shrink: 0; display: flex; align-items: center; justify-content: center; text-align: center; line-height: 2em; padding: 0 .5em; } .cbi-dropdown>.open { color: transparent; overflow: hidden; text-indent: -9999px; user-select: none; } .cbi-dropdown>.open::before { content: ""; width: 5px; height: 5px; border-right: 1px solid var(--on-surface-variant); border-bottom: 1px solid var(--on-surface-variant); transform: translateY(-1px) rotate(45deg); transition: transform .2s ease; text-indent: 0; } .cbi-dropdown[open]>.open::before { transform: translateY(1px) rotate(225deg); } .cbi-dropdown.btn>.open, .cbi-dropdown.cbi-button>.open { padding: 0 .6em; margin-left: .3em; border-left: 1px solid; } .cbi-dropdown.btn>.open::before, .cbi-dropdown.cbi-button>.open::before { border-color: var(--on-color, currentColor); } .cbi-dropdown>.more, .cbi-dropdown:not(.btn):not(.cbi-button)>ul>li[placeholder] { color: var(--text-color-medium); display: none; } .cbi-dropdown>ul>li { display: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; flex-grow: 1; align-items: center; align-self: center; color: inherit; } .cbi-dropdown>ul.dropdown>li, .cbi-dropdown:not(.btn):not(.cbi-button)>ul>li { min-height: 20px; padding: .25em; color: var(--text-color-high); } .cbi-dropdown>ul>li .hide-open { display: block; display: initial; } .cbi-dropdown>ul>li .hide-close { display: none; } .cbi-dropdown>ul>li[display]:not([display="0"]) { border-left: 1px solid var(--border-color-high); } .cbi-dropdown[empty]>ul { max-width: 1px; } .cbi-dropdown>ul>li>form { display: none; margin: 0; padding: 0; pointer-events: none; } .cbi-dropdown>ul>li img { vertical-align: middle; margin-right: .25em; } .cbi-dropdown>ul>li>form>input[type="checkbox"] { margin: 0 .25em 0 0; } .cbi-dropdown>ul>li input[type="text"] { height: 30px; border: 0; border-radius: 6px; } .cbi-dropdown[open] { position: relative; } .cbi-dropdown[open]>ul.dropdown { display: block; background: var(--surface-container-low); border: 0; box-shadow: var(--material3-card-shadow); position: absolute; z-index: 1100; max-width: none; min-width: 100%; width: auto; transition: max-height .125s ease-in; overflow-y: auto; border-radius: 6px; left: 0 !important; } .cbi-dropdown>ul>li[display], .cbi-dropdown[open]>ul.preview, .cbi-dropdown[open]>ul.dropdown>li, .cbi-dropdown[multiple]>ul>li>label, .cbi-dropdown[multiple][open]>ul.dropdown>li, .cbi-dropdown[multiple][more]>.more, .cbi-dropdown[multiple][empty]>.more { flex-grow: 1; display: flex !important; } .cbi-dropdown[empty]>ul>li, .cbi-dropdown[optional][open]>ul.dropdown>li[placeholder] { display: block !important; } .cbi-dropdown[multiple][open]>ul.dropdown>li>form { display: flex !important; } .cbi-dropdown[open]>ul.dropdown>li .hide-open { display: none; } .cbi-dropdown[open]>ul.dropdown>li .hide-close { display: block; display: initial; } .cbi-dropdown[open]>ul.dropdown>li { border: 0; padding: 8px; color: var(--on-surface); } .cbi-dropdown[open]>ul.dropdown>li[selected] { background: var(--primary-container); color: var(--on-primary-container); } .cbi-dropdown[open]>ul.dropdown>li.focus, .cbi-dropdown[open]>ul.dropdown>li:hover { background: var(--material3-menu-hover-background); color: var(--on-surface); } .cbi-dropdown[open]>ul.dropdown>li[selected].focus, .cbi-dropdown[open]>ul.dropdown>li[selected]:hover { background: color-mix(in srgb, var(--primary) 12%, var(--primary-container)); color: var(--on-primary-container); } .cbi-dropdown[open]>ul.dropdown>li:last-child { margin-bottom: 0; border-bottom: none; } .cbi-dropdown[open]>ul.dropdown>li[unselectable] { opacity: 0.7; } .cbi-dropdown[open]>ul.dropdown>li>input.create-item-input:first-child:last-child { width: 100%; } .cbi-title-ref { color: #37c; } .cbi-title-ref::after { content: "➙"; } .cbi-tooltip-container { cursor: help; } .cbi-tooltip { position: absolute; z-index: 1000; left: -10000px; box-shadow: 0 0 2px var(--border-color-high); border-radius: 3px; background: var(--background-color-high); white-space: pre; padding: 2px 5px; opacity: 0; transition: opacity .25s ease-in; } .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { left: auto; opacity: 1; transition: opacity .25s ease-in; } .cbi-progressbar { border: 0; border-radius: 3px; position: relative; min-width: 170px; height: 4px; margin: 1.4em 0 4px 0; background: var(--surface-container-high); box-shadow: none; } .cbi-progressbar>div { background: var(--primary); height: 100%; transition: width .25s ease-in; width: 0%; border-radius: 2px; } .cbi-progressbar::before { position: absolute; top: -1.4em; left: 0; content: attr(title); white-space: pre; overflow: hidden; text-overflow: ellipsis; } .zonebadge .cbi-tooltip { padding: 1px; background: inherit; margin: -1.6em 0 0 -5px; border-radius: 3px; pointer-events: none; box-shadow: 0 0 3px #444; } .zonebadge .cbi-tooltip>* { margin: 1px; z-index: 2; position: relative; } .zone-forwards { display: flex; flex-wrap: nowrap; } .zone-forwards>* { flex: 1 1 40%; padding: 1px; text-wrap: auto; } .zone-forwards>span { flex-basis: 10%; text-align: center; } .zone-forwards .zone-src, .zone-forwards .zone-dest { display: flex; flex-direction: column; } .btn.active, .btn:active { box-shadow: inset 0 2px 4px hsla(var(--border-color-low-hsl), .25), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled, .btn[disabled] { cursor: default; opacity: var(--disabled-opacity); box-shadow: none; } .btn.large { font-size: 15px; line-height: normal; padding: 9px 14px 9px; border-radius: 999px; } .btn.small { padding: 7px 9px 7px; font-size: 11px; } .close { float: right; color: #000; font-size: 20px; font-weight: bold; line-height: 13.5px; text-shadow: 0 1px 0 #fff; opacity: 0.25; } .close:hover { color: #000; text-decoration: none; opacity: 0.4; } .alert-message { position: relative; padding: 10px 14px; margin-bottom: 12px; color: var(--on-warning-container); background: var(--warning-container); border: 1px solid color-mix(in srgb, var(--warning) 28%, var(--warning-container)); border-radius: 16px; box-shadow: none; white-space: unset; } .alert-message .close { margin-top: 1px; } .alert-message h4, .alert-message h5, .alert-message pre, .alert-message ul, .alert-message li, .alert-message p { color: inherit; border: none; line-height: inherit; background: transparent; padding: 0; margin: .25em 0; } .alert-message button { margin: .25em 0; } .label, header [data-indicator] { padding: 3px 3px 2px; font-size: 9.75px; font-weight: bold; color: var(--text-color-high); text-transform: uppercase; white-space: nowrap; background-color: var(--background-color-low); border-radius: 3px; text-shadow: none; margin: .125em 0 .125em .4em; } header [data-indicator][data-clickable] { cursor: pointer; } header #indicators { display: flex; align-items: center; gap: 6px; } header [data-indicator] { display: inline-flex; align-items: center; gap: 5px; margin: 0; padding: 6px 10px 6px 8px; border-radius: 999px; font-size: 12px; font-weight: 600; text-transform: none; color: color-mix(in srgb, var(--material3-header-foreground) 60%, var(--material3-header-background)); background: transparent; transition: background-color .2s ease, color .2s ease; } header [data-indicator][data-style="active"] { color: var(--material3-indicator-active-foreground); background: var(--material3-indicator-active-background); } header [data-indicator][data-clickable]:hover { color: var(--material3-indicator-hover-foreground); background: var(--material3-indicator-hover-background); } header [data-indicator][data-clickable]:active { color: var(--material3-indicator-pressed-foreground); background: var(--material3-indicator-pressed-background); } header [data-indicator="poll-status"] { color: var(--material3-refresh-foreground); background: var(--material3-refresh-background); } header [data-indicator="poll-status"][data-style="active"], header [data-indicator="poll-status"][data-style="active"][data-clickable]:hover, header [data-indicator="poll-status"][data-style="active"][data-clickable]:active { color: var(--text-color-high); background: transparent; } header [data-indicator="poll-status"][data-style="active"][data-clickable]:hover { background: color-mix(in srgb, var(--text-color-high) 8%, transparent); } header [data-indicator="poll-status"][data-style="active"][data-clickable]:active { background: color-mix(in srgb, var(--text-color-high) 12%, transparent); } header [data-indicator="poll-status"][data-clickable]:hover { color: var(--material3-refresh-hover-foreground); background: var(--material3-refresh-hover-background); } header [data-indicator="poll-status"][data-clickable]:active { color: var(--material3-refresh-pressed-foreground); background: var(--material3-refresh-pressed-background); } header [data-indicator="poll-status"][data-style="inactive"] { color: var(--on-primary-container); background: var(--md-sys-color-primary-container); } header [data-indicator="poll-status"][data-style="inactive"][data-clickable]:hover, header [data-indicator="poll-status"][data-style="inactive"][data-clickable]:active { color: var(--on-primary-container); background: var(--md-sys-color-primary-container-hover); } header [data-indicator]::before { content: ''; width: 16px; height: 16px; background-color: currentColor; } header [data-indicator="poll-status"]::before { -webkit-mask: url("icons/refresh.svg") center/contain no-repeat; mask: url("icons/refresh.svg") center/contain no-repeat; } header [data-indicator="poll-status"][data-style="inactive"]::before { -webkit-mask-image: url("icons/pause.svg"); mask-image: url("icons/pause.svg"); animation: none; } header [data-indicator="uci-changes"]::before { -webkit-mask: url("icons/changes.svg") center/contain no-repeat; mask: url("icons/changes.svg") center/contain no-repeat; } header [data-indicator="poll-status"][data-style="active"]::before { animation: spin-with-pause 5s linear infinite; } @keyframes spin-with-pause { 0% { transform: rotate(0); } 20%, 100% { transform: rotate(360deg); } } a.label:link, a.label:visited { color: #fff; } a.label:hover { text-decoration: none; } .label.important { background-color: var(--primary-color-high); color: var(--on-primary-color); } .label.warning { background-color: var(--warn-color-high); color: var(--on-warn-color); } .label.success { background-color: var(--success-color-high); color: var(--on-success-color); } .label.notice { color: var(--on-primary-color); background-color: var(--primary-color-high); } /* LuCI specific items */ .hidden { display: none } form.inline { display: inline; margin-bottom: 0; } #modemenu li:last-child span.divider { display: none } #syslog { width: 100%; color: var(--text-color-highest); margin-bottom: 18px; font-family: Consolas, Monaco, "Courier New", Menlo, monospace; } .cbi-section-table .tr:hover .td, .cbi-section-table .tr:hover .th, .cbi-section-table .tr:hover::before { background-color: transparent; } .cbi-section-table .tr.cbi-section-table-descr .th { font-weight: normal; } .cbi-section-table-titles { font-weight: bold; } .cbi-section-table-descr.named::before, .cbi-section-table-row[data-title]::before { content: none; } .cbi-section-table-titles.named::before, .cbi-section-table-descr.named::before, .cbi-section-table-row[data-title]::before { border-top: 0; } .left { text-align: left !important; } .right { text-align: right !important; } .center { text-align: center !important; } .top { vertical-align: top !important; } .middle { vertical-align: middle !important; } .bottom { vertical-align: bottom !important; } table table td, .cbi-value-field table td { border: none; } .table.cbi-section-table input[type="password"], .table.cbi-section-table input[type="text"], .table.cbi-section-table textarea, .table.cbi-section-table select, .table.cbi-section-table .cbi-select { width: 100%; min-width: auto; } .table.cbi-section-table .td.cbi-section-table-cell { white-space: nowrap; text-align: right; } .table.cbi-section-table .td.cbi-section-table-cell select, .table.cbi-section-table .td.cbi-section-table-cell .cbi-select { width: inherit; } .td.cbi-section-actions { text-align: right; vertical-align: middle; width: 15%; } .td.cbi-section-actions>* { display: flex; } .td.cbi-section-actions> :not(.cbi-dropdown)>*, .td.cbi-section-actions>*>form>* { flex: 1 1 4em; margin: 0 1px; } .td.cbi-section-actions>*>form { display: inline-flex; margin: 0; } .table.valign-middle .td { vertical-align: middle; } .cbi-rowstyle-2, .tr.table-titles, .tr.cbi-section-table-titles { background: transparent; } th[data-sortable-row] { cursor: pointer; } th[data-sort-direction="asc"]::after { content: "\a0\25b2"; } th[data-sort-direction="desc"]::after { content: "\a0\25bc"; } .cbi-value-description { margin: .25em 0 0 1.25em; position: relative; } .cbi-value-description:not(:empty)::before { --help-icon: url("data:image/svg+xml,"); position: absolute; left: -1.25em; content: "\a0"; display: inline-block; width: 1em; height: 1em; margin-right: .25em; background: var(--primary-color-high); mask-image: var(--help-icon); mask-size: cover; -webkit-mask-image: var(--help-icon); -webkit-mask-size: cover; } .cbi-section-error { border: 1px solid var(--error-color-high); border-radius: 3px; background-color: var(--error-color-low); padding: 5px; margin-bottom: 18px; } .cbi-section-error ul { margin: 0 0 0 20px; } .cbi-section-error ul li { color: var(--on-error-container); font-weight: bold; } .ifacebox { border: 1px solid var(--border-color-high); margin: 0 10px; text-align: center; white-space: nowrap; background: var(--background-color-high); border-radius: 12px; box-shadow: inset 0 1px 0 hsla(var(--text-color-low-hsl), 0.05); display: inline-flex; flex-direction: column; line-height: 1.2em; min-width: 100px; } .ifacebox .ifacebox-head { border-bottom: 1px solid var(--border-color-high); border-radius: 11px 11px 0 0; padding: 2px; background: #eee; color: var(--text-color-high); } .ifacebox .ifacebox-head[style] { text-shadow: 0 1px 1px hsla(var(--background-color-high-hsl), 0.75); } .ifacebox .ifacebox-head.active { background: var(--primary-color-high); color: var(--on-primary-color); } [data-darkmode="true"] .zonebadge[style], [data-darkmode="true"] .ifacebox-head[style] { background: rgba(var(--zone-color-rgb), .36) !important; } .ifacebox .ifacebox-body { padding: .25em; } #cbi-network-interface .ifacebox-body { white-space: normal; } #cbi-network-interface .ifacebox img { width: 24px; height: 24px; } .ifacebadge { display: inline-block; flex-direction: row; border: 1px solid var(--border-color-high); padding: 2px 8px; background: var(--default-btn-background, var(--background-color-high)); color: var(--on-color, var(--text-color-high)); text-shadow: none; border-radius: 12px; box-shadow: none; cursor: default; line-height: 1.2em; } .ifacebadge img { width: 32px; height: 32px; vertical-align: middle; } .ifacebadge-active { border-color: #000; font-weight: bold; } .network-status-table { display: flex; flex-wrap: wrap; } .network-status-table .ifacebox { margin: .5em; flex-grow: 1; } .network-status-table .ifacebox-body { display: flex; flex-direction: column; height: 100%; text-align: left; } .network-status-table .ifacebox-body>* { margin: .25em; } .network-status-table .ifacebox-body>span { flex: 10 10 auto; height: 100%; } .network-status-table .ifacebox-body>div { margin: -.125em; display: flex; flex-wrap: wrap; } #dsl_status_table .ifacebox-body span>strong { display: inline-block; min-width: 35%; } .ifacebadge.large, .network-status-table .ifacebox-body .ifacebadge { display: flex; flex: 1; padding: .25em; min-width: 220px; margin: .125em; } .ifacebadge.large { display: inline-flex; } .network-status-table .ifacebox-body .ifacebadge>span { overflow: hidden; text-overflow: ellipsis; } .ifacebadge>*, .ifacebadge.large>* { margin: 0 .125em; } .zonebadge { padding: 2px; border-radius: 12px; display: inline-block; white-space: nowrap; color: var(--text-color-high); text-shadow: 0 1px 1px hsla(var(--background-color-high-hsl), 0.75); } .zonebadge>em, .zonebadge>strong { margin: 0 2px; display: inline-block; } .zonebadge input { width: 6em; } .zonebadge>.ifacebadge { margin-left: 2px; } .zonebadge-empty { border: 1px dashed #aaa; color: #aaa; font-style: italic; font-size: smaller; } div.cbi-value var, .td.cbi-value-field var { font-style: italic; color: var(--primary-color-high); } div.cbi-value var[data-tooltip], .td.cbi-value-field var[data-tooltip], div.cbi-value var.cbi-tooltip-container, .td.cbi-value-field var.cbi-tooltip-container { cursor: help; border-bottom: 1px dotted var(--primary-color-high); } div.cbi-value var.cbi-tooltip-container, .td.cbi-value-field var.cbi-tooltip-container .cbi-tooltip { font-style: normal; white-space: normal; color: var(--text-color-high); } #modal_overlay>.modal.uci-dialog, #modal_overlay>.modal.cbi-modal { max-width: 900px; } #modal_overlay>.modal.login>button.important { height: 44px; margin-top: 8px; width: 100%; background: var(--primary); border-color: var(--primary); color: var(--on-primary); font-size: 14px !important; font-weight: 600; line-height: 44px; box-shadow: none; } #modal_overlay>.modal.login>button.important:hover { background: var(--button-hover); border-color: var(--button-hover) !important; color: var(--on-primary); box-shadow: none; } #modal_overlay>.modal.login>button.important:active { background: var(--button-pressed); border-color: var(--button-pressed) !important; } .uci-change-list { line-height: 170%; white-space: pre; } .uci-dialog div>del, .uci-dialog div>ins, .uci-dialog div>var { margin-bottom: 2px; border: 1px solid var(--border-color-high); line-height: 15px; overflow: hidden; text-overflow: ellipsis; padding: 2px; position: relative; background-color: var(--background-color-low); } .uci-dialog div>ins { background-color: rgba(var(--success-color-high-rgb), .3); border-color: rgba(var(--success-color-high-rgb), .6); } .uci-dialog div>del { background-color: rgba(var(--error-color-high-rgb), .3); border-color: rgba(var(--error-color-high-rgb), .6); } .uci-dialog var>ins { background-color: rgba(var(--success-color-high-rgb), .3); } .uci-dialog var>del { background-color: rgba(var(--error-color-high-rgb), .3); } .uci-change-list>var>* { overflow: hidden; text-overflow: ellipsis; } .uci-dialog del, .uci-dialog ins, .uci-dialog var { text-decoration: none; font-family: monospace; font-style: normal; color: var(--text-color-high); display: block; } .uci-change-legend { display: flex; flex-wrap: wrap; } .uci-change-legend-label { flex-basis: 150px; margin: 2px; display: flex; align-items: center; } .uci-change-legend-label>ins, .uci-change-legend-label>del, .uci-change-legend-label>var { margin-right: 4px; width: 16px; height: 16px; display: flex; } .uci-change-legend-label>*>* { flex-basis: 100%; padding: 1px; } #applyreboot-section { line-height: 300%; } @keyframes flash { 0% { opacity: 1; } 50% { opacity: .5; } 100% { opacity: 1; } } .flash { animation: flash .35s; } #view>div.spinning:first-child { display: table; margin: 15vh auto; } .spinning { position: relative; padding-left: 32px !important; } .spinning::before { --spinner-icon: url("data:image/svg+xml,"); position: absolute; top: calc(50% - 10px); left: 6px; width: 20px; height: 20px; content: " "; background: var(--on-color, var(--primary)); mask: var(--spinner-icon) center/cover no-repeat; -webkit-mask: var(--spinner-icon) center/cover no-repeat; } [data-darkmode="true"] .spinning::before, [data-mode="dark"] .spinning::before { background: var(--on-color, var(--primary)); } [data-tab-title] { height: 0; opacity: 0; overflow: hidden; } [data-tab-active="true"] { opacity: 1; height: auto; overflow: visible; transition: opacity .25s ease-in; } .cbi-filebrowser { min-width: 210px; max-width: 100%; border: 1px solid #ccc; border-radius: 3px; display: flex; flex-direction: column; opacity: 0; height: 0; overflow: hidden; } .cbi-filebrowser.open { opacity: 1; height: auto; overflow: visible; transition: opacity .25s ease-in; } .cbi-filebrowser>* { max-width: 100%; overflow: hidden; text-overflow: ellipsis; padding: 0 0 .25em 0; margin: .25em .25em 0px .25em; white-space: nowrap; border-bottom: 1px solid #ccc; } .cbi-filebrowser .cbi-button-positive { margin-right: .25em; } .cbi-filebrowser>div { border-bottom: none; } .cbi-filebrowser>ul>li { display: flex; flex-direction: row; } .cbi-filebrowser>ul>li:hover { background: #f5f5f5; } .cbi-filebrowser>ul>li>div:first-child { flex: 10; overflow: hidden; text-overflow: ellipsis; } .cbi-filebrowser>ul>li>div:last-child { flex: 3; text-align: right; } .cbi-filebrowser>ul>li>div:last-child>button { padding: .125em .25em; margin: 1px 0 1px .25em; } .cbi-filebrowser .upload { display: flex; flex-direction: row; flex-wrap: wrap; margin: 0 -.125em .25em -.125em; padding: 0 0 .125em 0px; border-bottom: 1px solid #ccc; } .cbi-filebrowser .upload>* { margin: .125em; flex: 1; } .cbi-filebrowser .upload>.btn { flex-basis: 60px; } .cbi-filebrowser .upload>div { flex: 10; min-width: 150px; } .cbi-filebrowser .upload>div>input { width: 100%; } @keyframes fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } .fade-in { animation: fade-in .4s ease; } .fade-out { animation: fade-out .4s ease; } .assoclist .ifacebadge { display: flex; flex-direction: column; align-items: center; white-space: normal; text-align: center; } .assoclist .ifacebadge>img { margin: .2em; } .assoclist .td:nth-of-type(3), .assoclist .td:nth-of-type(5) { width: 25%; } .assoclist .td:nth-of-type(6) button { word-break: normal; } [data-darkmode="true"] [data-page="admin-statistics-graphs"] [data-plugin] img { filter: invert(100%) hue-rotate(150deg); } [data-page="admin-system-admin-sshkeys"] .cbi-dynlist { max-width: none; } .cbi-section-node, .table { box-sizing: border-box; margin: 0 0 10px; width: 100%; border-radius: var(--material3-card-radius); background: var(--material3-card-background); box-shadow: var(--material3-card-shadow); } .cbi-section-node { padding: 8px; } #view div[style]>svg { background-color: var(--background-color-high) !important; } #view div[style]>svg line[style] { stroke: var(--text-color-highest) !important; } /* Status overview and dashboard */ :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-section, :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .cbi-section, :is(body[data-page="admin-dashboard"], body[data-page="admin"]) .cbi-section-node { border: 0; background: transparent; box-shadow: none; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-section { margin: 0 0 18px; padding: 0; width: auto; border-radius: 0; } :is(body[data-page="admin-status-overview"], body[data-page=""]) :is(.cbi-section-descr, .cbi-map-descr, .cbi-section p, .cbi-section li) { color: var(--on-surface-variant); font-size: 13px; font-weight: 400; line-height: 18px; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label { display: inline-flex !important; align-items: center; justify-content: center; gap: 6px; min-width: 0 !important; height: 28px; margin: 0; padding: 0 10px; border-radius: 999px; background: transparent; color: var(--on-surface-variant); font-size: 12px; font-weight: 600; line-height: 28px; text-transform: none; cursor: pointer; transition: background-color .2s ease, color .2s ease, opacity .2s ease; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label::before { content: ''; width: 17px; height: 17px; background: currentColor; -webkit-mask: url("icons/eye-off.svg") center/contain no-repeat; mask: url("icons/eye-off.svg") center/contain no-repeat; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label:hover, :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label.notice:hover { background: var(--material3-menu-hover-background); color: var(--on-surface); } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label.notice { background: transparent; color: color-mix(in srgb, var(--on-surface-variant) 72%, transparent); } :is(body[data-page="admin-status-overview"], body[data-page=""]) .cbi-title .label.notice::before { -webkit-mask-image: url("icons/eye.svg"); mask-image: url("icons/eye.svg"); } :is(body[data-page="admin-status-overview"], body[data-page=""]) .network-status-table { gap: 10px; margin: 0 0 10px; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .network-status-table .ifacebox { flex: 1 1 260px; margin: 0; padding: 8px; text-align: left; white-space: normal; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebox .ifacebox-head { padding: 2px 0 8px; border: 0; border-radius: 0; background: transparent !important; color: var(--on-surface-variant); font-weight: 400; opacity: .9; text-shadow: none; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebox .ifacebox-head strong { font-weight: 500; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebox .ifacebox-head.active { border: 0; background: transparent !important; color: var(--on-surface); text-shadow: none; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebox .ifacebox-body { padding: 0; line-height: 1.35; } :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebadge, :is(body[data-page="admin-status-overview"], body[data-page=""]) .ifacebadge.large, :is(body[data-page="admin-status-overview"], body[data-page=""]) .network-status-table .ifacebox-body .ifacebadge { padding: 8px; border: 1px solid color-mix(in srgb, var(--outline) 48%, transparent); border-radius: 16px; background: var(--default-btn-background, var(--background-color-high)); box-shadow: none; text-shadow: none; } /* Dashboard cards */ :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .dashboard-bg.box-s1, :is(body[data-page="admin-status-overview"], body[data-page=""]) .network-status-table .ifacebox { border: 0; border-radius: var(--material3-card-radius); background: var(--material3-card-background); box-shadow: var(--material3-card-shadow); } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard :is(.thead.dashboard-bg, .tr.dashboard-bg, .tfoot.dashboard-bg, .table) { border-radius: 0; background: transparent; box-shadow: none; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .table { margin: 0; width: auto; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .router-status-wifi .assoclist.devices-info .tr> :nth-child(3) { width: 30%; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .router-status-wifi .assoclist.devices-info .tr> :nth-child(4) { width: 20%; min-width: 85px; white-space: normal; word-break: keep-all; overflow-wrap: normal; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard hr { border: 0; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard :is(h3, .settings-info) { color: var(--on-surface-variant); } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .router-status-info .settings-info p span:nth-child(2) { max-width: none; } :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard .settings-info p span:nth-child(2) { vertical-align: top; } :is(body[data-page="admin-status-iptables"], body[data-page="admin-status-nftables-iptables"]) .cbi-tabmenu { margin-top: 28px; } [data-darkmode="true"] :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard img.svgmonotone, [data-mode="dark"] :is(body[data-page="admin-dashboard"], body[data-page="admin"], body[data-page=""]) .Dashboard img.svgmonotone { filter: invert(1) brightness(1.65) contrast(.82) opacity(.86); } [data-darkmode="true"] body[data-page^="admin-services-dockerman"] img[src*="dockerman/"][src$=".svg"], [data-mode="dark"] body[data-page^="admin-services-dockerman"] img[src*="dockerman/"][src$=".svg"] { filter: invert(1) brightness(1.65) contrast(.82) opacity(.9); } [data-darkmode="true"] body[data-page^="admin-services-dockerman"] img[src*="dockerman/containers.svg"][src$=".svg"], [data-mode="dark"] body[data-page^="admin-services-dockerman"] img[src*="dockerman/containers.svg"][src$=".svg"] { filter: none !important; opacity: .96; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"] { color: inherit; } body[data-page^="admin-services-dockerman"] #view div[style*="grid-template-columns"][style*="minmax(300px"] { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) !important; gap: 10px !important; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"]>div[style*="min-height: 120px"] { border: 1px solid var(--border-color-low) !important; border-radius: 12px !important; background: var(--background-color-high) !important; box-shadow: none !important; transition: background-color .2s ease, border-color .2s ease; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"]>div[style*="min-height: 120px"]:hover { border-color: var(--border-color-medium) !important; background: var(--background-color-low) !important; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"] div[style*="color: #333"] { color: var(--on-surface) !important; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"] span[style*="color: #666"] { color: var(--on-surface-variant) !important; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"] strong[style*="color: #0066cc"] { color: var(--primary-color-high) !important; } body[data-page^="admin-services-dockerman"] #view a[href*="/dockerman/"] strong[style*="color: #28a745"] { color: var(--success-color-high) !important; }