mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 17:06:15 -08:00
* feat(workspace): add keyboard shortcuts help * style(workspace): polish keyboard shortcuts dialog * fix(workspace): address shortcuts review feedback * docs(workspace): clarify desktop shortcut availability * refactor(workspace): split keyboard shortcut definitions
220 lines
6.9 KiB
SCSS
220 lines
6.9 KiB
SCSS
@use '../../../libs/ui/components/src/lib/resizable/resizable.scss';
|
|
@use './settings-theme';
|
|
@use './cover-size';
|
|
|
|
// ─── Tailwind CSS ─────────────────────────────────────────────────────────────
|
|
// Preflight is disabled in tailwind.config.js to avoid conflicts with
|
|
// Angular Material. Only components + utilities are loaded.
|
|
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
// ─── Third-party ─────────────────────────────────────────────────────────────
|
|
@import '@yangkghjh/videojs-aspect-ratio-panel/dist/videojs-aspect-ratio-panel.css';
|
|
@import 'material-design-icons-iconfont/dist/material-design-icons.css';
|
|
|
|
// ─── Bundled Fonts ────────────────────────────────────────────────────────────
|
|
@import '@fontsource/dm-sans/400.css';
|
|
@import '@fontsource/dm-sans/500.css';
|
|
@import '@fontsource/dm-sans/600.css';
|
|
@import '@fontsource/roboto/300.css';
|
|
@import '@fontsource/roboto/400.css';
|
|
@import '@fontsource/roboto/500.css';
|
|
@import '@fontsource/jetbrains-mono/400.css';
|
|
@import '@fontsource/jetbrains-mono/500.css';
|
|
@import '@fontsource/crimson-pro/400.css';
|
|
@import '@fontsource/crimson-pro/600.css';
|
|
@import '@fontsource/crimson-pro/700.css';
|
|
|
|
// ─── Shared Components ────────────────────────────────────────────────────────
|
|
|
|
// Always-visible themed scrollbar. Apply to scroll containers that should
|
|
// reserve gutter and not rely on macOS overlay scrollbars (which auto-fade).
|
|
// Selector is doubled (.app-scrollbar.app-scrollbar) throughout so the rules
|
|
// outrank both component-scoped overflow declarations and the global
|
|
// `.dark-theme ::-webkit-scrollbar` block below.
|
|
.app-scrollbar.app-scrollbar {
|
|
// !important so the utility wins over component-scoped overflow rules
|
|
// (Angular ViewEncapsulation adds an attribute selector that pushes
|
|
// host specificity above the doubled class selector).
|
|
overflow-y: scroll !important;
|
|
scrollbar-gutter: stable;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: color-mix(in srgb, var(--app-muted-color) 55%, transparent)
|
|
transparent;
|
|
|
|
&::-webkit-scrollbar {
|
|
width: 10px;
|
|
height: 10px;
|
|
}
|
|
|
|
&::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
background-color: color-mix(
|
|
in srgb,
|
|
var(--app-muted-color) 70%,
|
|
transparent
|
|
);
|
|
border-radius: 999px;
|
|
border: 2px solid transparent;
|
|
background-clip: content-box;
|
|
min-height: 32px;
|
|
|
|
&:hover {
|
|
background-color: var(--app-muted-color);
|
|
background-clip: content-box;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Shared count-badge pill. Section headers (dashboard rails, content rails)
|
|
// and dense list rows (category sidebars) share a single visual treatment so
|
|
// "count" reads consistently across the app. Theme-aware via --app-muted-color.
|
|
.app-count-badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
flex-shrink: 0;
|
|
font-size: 0.78rem;
|
|
font-weight: 500;
|
|
line-height: 1;
|
|
color: var(--app-muted-color, #8891a4);
|
|
font-variant-numeric: tabular-nums;
|
|
padding: 2px 8px;
|
|
border-radius: 999px;
|
|
background: color-mix(
|
|
in srgb,
|
|
var(--app-muted-color, #8891a4) 18%,
|
|
transparent
|
|
);
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
app-root.macos-platform .current-playlist {
|
|
padding-top: 30px;
|
|
}
|
|
|
|
app-root.macos-platform app-navigation .portal-status-container {
|
|
padding-top: 30px;
|
|
}
|
|
|
|
// ─── Base ─────────────────────────────────────────────────────────────────────
|
|
body,
|
|
html {
|
|
user-select: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
height: 100%;
|
|
font-family:
|
|
'DM Sans',
|
|
'Roboto',
|
|
-apple-system,
|
|
BlinkMacSystemFont,
|
|
'Segoe UI',
|
|
'Helvetica Neue',
|
|
Arial,
|
|
sans-serif;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
// Re-enable context menu and text selection for input fields
|
|
input,
|
|
textarea {
|
|
user-select: text;
|
|
}
|
|
|
|
@media (display-mode: standalone) {
|
|
body {
|
|
overscroll-behavior-y: contain;
|
|
overflow: hidden;
|
|
}
|
|
}
|
|
|
|
// ─── Utilities ────────────────────────────────────────────────────────────────
|
|
.mat-tab-label-active {
|
|
opacity: 1 !important;
|
|
}
|
|
|
|
input,
|
|
button,
|
|
textarea,
|
|
:focus {
|
|
outline: none;
|
|
}
|
|
|
|
// ─── Dark Theme ───────────────────────────────────────────────────────────────
|
|
.dark-theme {
|
|
background: var(--mat-sys-surface) !important;
|
|
|
|
// Refined scrollbar for dark mode
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background-color: var(--mat-sys-outline-variant);
|
|
border-radius: 999px;
|
|
|
|
&:hover {
|
|
background-color: var(--mat-sys-outline);
|
|
}
|
|
}
|
|
}
|
|
|
|
.scroll-viewport-portals {
|
|
min-height: calc(100vh - 170px) !important;
|
|
overflow-x: hidden !important;
|
|
}
|
|
|
|
.mat-drawer-inner-container {
|
|
overflow: hidden !important;
|
|
}
|
|
|
|
.cdk-overlay-backdrop {
|
|
backdrop-filter: blur(4px);
|
|
}
|
|
|
|
// Full-screen overlay dialogs (global search/recent) must stay interactive in Electron.
|
|
.global-search-overlay,
|
|
.global-search-overlay .mat-mdc-dialog-surface,
|
|
.global-search-overlay .mat-mdc-dialog-container {
|
|
app-region: no-drag;
|
|
}
|
|
|
|
// Command palette dialog — the palette-shell renders its own background, border,
|
|
// radius and shadow, so strip MDC's dialog surface chrome to avoid a darker
|
|
// halo peeking out behind the rounded corners.
|
|
.workspace-command-palette-overlay .mat-mdc-dialog-surface {
|
|
background: transparent;
|
|
box-shadow: none;
|
|
border-radius: 14px;
|
|
padding: 0;
|
|
overflow: visible;
|
|
}
|
|
|
|
.workspace-shortcuts-overlay,
|
|
.workspace-shortcuts-overlay .mat-mdc-dialog-surface,
|
|
.workspace-shortcuts-overlay .mat-mdc-dialog-container {
|
|
app-region: no-drag;
|
|
}
|
|
|
|
.workspace-shortcuts-overlay .mat-mdc-dialog-surface {
|
|
background: transparent;
|
|
box-shadow: none;
|
|
border-radius: 14px;
|
|
padding: 0;
|
|
overflow: visible;
|
|
}
|
|
|
|
.mat-mdc-snack-bar-container.settings-snackbar {
|
|
margin-bottom: calc(76px + env(safe-area-inset-bottom, 0px));
|
|
}
|