:root { /* Borders */ --border-color-base: var(--sidebar-border-color); --border-radius-sm: 4px; --border-radius-base: 5px; --border-radius-md: 8px; --border-radius-lg: 10px; --border-radius-xl: 1rem; --border-width-thin: 1px; --border-width-base: 2px; --border-width-thick: 5px; --border-solid: solid; --border-style-base: solid; --border-style-input: 1px solid var(--sidebar-border-color); /* Breakpoints */ --breakpoint-xs: 360px; --breakpoint-sm: 480px; --breakpoint-md: 768px; --breakpoint-lg: 1024px; --breakpoint-xl: 1280px; /* Colors — Galaxy palette (cosmic purple · teal · rose · amber) */ --accent-bg: #8b6cc5; --accent-hover-bg: #7558b0; --card-bg: #121224; --color-black: #000000; --color-confirm: #8b6cc5; --color-confirm-hover: #7558b0; --color-gray-100: #f0f0f8; --color-gray-200: #d8d8e4; --color-gray-300: #b8b8cc; --color-gray-400: #9898b0; --color-gray-500: #7e7e98; --color-gray-600: #636380; --color-gray-700: #4a4a64; --color-gray-800: #2e2e44; --color-gray-900: #1a1a30; --color-white: #ffffff; --danger-bg: #e05577; --danger-fg: #e05577; --danger-hover-bg: #c04466; --glow-primary: 0 0 0 2px var(--main-fg), 0 0 10px rgba(139, 108, 197, 0.35); --input-bg: #161630; --main-bg: #06060f; --main-fg: #8b6cc5; --secondary-bg: #0e0e1a; --selected-camera-bg: #0b0b18; --sidebar-active-bg: rgba(139, 108, 197, 0.15); --sidebar-bg: #0a0a16; --sidebar-border-color: #1e1e3e; --sidebar-fg: #ffffff; --sidebar-title-fg: #8b6cc5; --success-bg: #5ec8c8; --success-fg: #5ec8c8; --success-hover-bg: #4ab3b3; --switch-inactive-bg: #1e1e3e; --text-color: #e8e8f0; --text-muted: #8080a8; --text-on-primary: var(--sidebar-fg); --text-on-surface: var(--text-color); --thumb-color: #8b6cc5; --track-color: #14142e; --warning-bg: #d4a060; --warning-hover-bg: #b8884a; /* Effects */ --disabled-opacity: 0.5; --focus-ring-color: var(--main-fg); --hover-opacity: 0.85; --hover-scale-sm: scale(1.01); --hover-scale-base: scale(1.05); --hover-scale-lg: scale(1.1); /* Fonts */ --font-body: "Inter", "Open Sans", sans-serif; --font-mono: "Courier New", Courier, monospace; --font-size-xs: 0.75rem; --font-size-sm: 0.85rem; --font-size-base: 1rem; --font-size-lg: 1.2rem; --font-size-xl: 1.5rem; --font-weight-normal: 400; --font-weight-demi-bold: 550; --font-weight-bold: 700; --heading-font: var(--font-body); /* Layout */ --max-width-content: 700px; --sidebar-width: 250px; --width-xs: 100px; --width-sm: 150px; --width-md: 300px; --width-lg: 500px; --width-xl: 750px; --width-xxl: 900px; --width-xxxl: 1050px; --width-xxxxl: 1200px; /* Shadows */ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.2); /* Spacing */ --gap-xxs: 0.125rem; --gap-xs: 0.25rem; --gap-sm: 0.5rem; --gap-md: 1rem; --gap-lg: 1.5rem; --gap-xl: 2rem; --gap-xxl: 3rem; --margin-xxs: 0.125rem; --margin-xs: 0.3rem; --margin-sm: 0.5rem; --margin-base: 1rem; --margin-lg: 1.5rem; --margin-xl: 2rem; --margin-xxl: 3rem; --padding-xxs: 0.125rem; --padding-xs: 0.3rem; --padding-sm: 0.5rem; --padding-base: 1rem; --padding-lg: 1.5rem; --padding-xl: 2rem; --padding-xxl: 3rem; --space-xxs: 0.125rem; --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-xxl: 3rem; /* Transitions */ --transition-fast: 0.15s ease-in-out; --transition-base: 0.3s ease; --transition-slow: 0.5s ease; /* Typography */ --letter-spacing-base: 0; --line-height-base: 1.5; /* Z-Index */ --z-overlay: 800; --z-sidebar: 900; --z-modal: 1000; --z-tooltip: 1100; } /* ――― Base elements ――― */ a.button { background-color: var(--sidebar-active-bg); border: none; border-radius: var(--border-radius-base); color: var(--main-fg); display: inline-block; margin: var(--margin-base) 0; padding: var(--padding-sm) var(--padding-base); text-align: center; text-decoration: none; } /* clickables share the pointer */ a[href], button, [role="button"], input[type="button"], input[type="submit"], input[type="checkbox"], input[type="radio"], .manage-keys-link, .route_card, .sidebar .menu_section>li>ul>li, .clickable { cursor: pointer; } body { padding-bottom: 0 !important; } /* ――― Layout containers ――― */ .content { color: var(--main-fg); flex-grow: 1; margin-left: var(--sidebar-width, 250px); overflow-y: auto; padding-bottom: var(--padding-xl); padding-left: var(--padding-lg); } /* ――― Headings ――― */ h1, h2, h3 { color: var(--text-color); margin: 0; padding: var(--padding-base) 0 var(--heading-bottom, 10px); } /* ――― Helpers & states ――― */ .hidden { display: none; } html { cursor: default; } .no_scroll { overflow: hidden; } .not_implemented { cursor: not-allowed; text-decoration: line-through; } /* ――― Base typography & page reset ――― */ html, body { background-color: var(--main-bg); font-family: var(--font-body); margin: 0; min-height: 100dvh; overflow-x: hidden; padding: 0; } /* weight-override set once for all matching selectors */ html, body, h1, h2, h3, .open-sans-regular { font-family: var(--font-body); font-optical-sizing: auto; font-style: normal; font-weight: var(--font-weight-demi-bold); } /* ――― HR line ――― */ hr { background-color: var(--sidebar-border-color); border: none; height: var(--border-width-thin); } /* text-inputs keep the I-beam */ input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="text"], .navkeys-input, .settings .textinput, textarea { cursor: text; } label[for] { cursor: default; } /* ――― Snackbar component ――― */ .snackbar { background-color: var(--color-confirm); border-radius: var(--border-radius-base); color: var(--text-color); margin-bottom: var(--margin-base); padding: var(--padding-base); text-align: center; transition: var(--snackbar-transition, 1s); visibility: hidden; } .snackbar.show { animation: fadein var(--snackbar-fade-time, 0.5s); visibility: visible; } /* zero-ed default list / link styles */ ul, li, a { display: block; list-style: none; margin: 0; padding: 0; } /* ――― Snackbar wrapper ――― */ #snackbar_wrapper { bottom: var(--snackbar-offset, 30px); left: var(--sidebar-width); margin: 0 auto; position: fixed; right: 0; width: min(var(--snackbar-width, 300px), 70%); z-index: var(--z-overlay); } /* ――― Animations ――― */ @keyframes fadein { from { bottom: 0; opacity: 0; } to { bottom: var(--snackbar-offset, 30px); opacity: 1; } } @keyframes fadeout { from { opacity: 1; } to { opacity: 0; } } /* ――― Breakpoint overrides ――― */ @media only screen and (max-width: var(--breakpoint-md)) { .content { margin-left: 0; } } @media only screen and (max-width: 768px) and (orientation: portrait) { .content { box-sizing: border-box; margin-left: 0; padding-left: 1rem; padding-right: 1rem; } #snackbar_wrapper { left: 50%; transform: translateX(-50%); width: 80%; } } /* legacy WebKit keyframes */ @-webkit-keyframes fadein { from { bottom: 0; opacity: 0; } to { bottom: var(--snackbar-offset, 30px); opacity: 1; } } @-webkit-keyframes fadeout { from { opacity: 1; } to { opacity: 0; } } /* ——— Tunnel notice banner ——— */ .tunnel-notice { align-items: center; background: linear-gradient(135deg, var(--card-bg), var(--secondary-bg)); border: var(--border-width-thin) var(--border-style-base) var(--sidebar-border-color); border-left: 3px solid var(--main-fg); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-md); color: var(--text-color); display: flex; flex-direction: column; gap: var(--gap-md); margin: var(--margin-xl) auto; max-width: var(--width-xl); padding: var(--padding-xl) var(--padding-xxl); text-align: center; } .tunnel-notice-icon { font-size: 2.5rem; opacity: 0.8; } .tunnel-notice-title { color: var(--text-color); font-size: var(--font-size-lg); font-weight: var(--font-weight-bold); margin: 0; } .tunnel-notice-body { color: var(--text-muted); font-size: var(--font-size-base); line-height: var(--line-height-base); margin: 0; } ::-webkit-scrollbar { height: 8px; width: 8px; } ::-webkit-scrollbar-track { background: var(--track-color); } ::-webkit-scrollbar-thumb { background-color: var(--thumb-color); border-radius: var(--border-radius-sm); }