/* SPDX-License-Identifier: AGPL-3.0-or-later */ :root { --sidebar-width: 2em; --keyboard-height: 220px; /* Z-index layers */ --z-base: 1; --z-base-active: 10; --z-local-ui: 100; --z-panel: 500; --z-dialog: 1000; --z-gesture: 5000; --z-chrome: 6000; --z-sheet: 7000; --z-modal: 8000; /* Keyboard offset - set to keyboard height when keyboard is open */ --keyboard-offset: 0px; } body.keyboard-open { --keyboard-offset: var(--keyboard-height); } * { box-sizing: border-box; } html { padding: 0; margin: 0; height: 100%; width: 100%; font-family: var(--font-family-base); } body { padding: 0; margin: 0; height: 100%; width: 100%; overflow: hidden; display: flex; flex-direction: column; color: var(--color-text-menu); } #header { height: var(--size-header-height); padding: var(--spacing-xs) var(--spacing-sm); width: fit-content; background: var(--bg-header); font-weight: var(--font-weight-bold); border-radius: var(--radius-sm) var(--radius-sm) 0 0; cursor: default; display: flex; align-items: center; gap: var(--spacing-xs); /* switch back (permanently?) to a regular OS provided window frame */ display: none; } #header img { width: var(--size-icon); } #header .close { cursor: pointer; } #header .resize { cursor: nw-resize; } main { display: flex; background: var(--bg-main); height: 100%; } #sidebar { display: flex; flex-direction: column; padding: var(--spacing-xs); gap: var(--spacing-xs); width: var(--sidebar-width); } #views-icons { flex: 1; display: flex; flex-direction: column; gap: var(--spacing-xs); overflow-y: auto; overflow-x: hidden; } .view-icon { width: 1.5em; height: 1.5em; border-radius: var(--radius-sm); cursor: pointer; display: flex; align-items: center; justify-content: center; background: var(--bg-webview); border: 2px solid transparent; transition: border-color var(--transition-fast), opacity var(--transition-fast); opacity: var(--opacity-muted); } .view-icon:hover { opacity: 1; } .view-icon.active { border-color: var(--color-focus-ring); opacity: 1; } .view-icon-img { width: 1em; height: 1em; object-fit: contain; } .view-icon-img[src=""] { display: none; } .sidebar-preview { position: fixed; z-index: var(--z-dialog); background: var(--bg-menu); border-radius: var(--radius-md); box-shadow: 0 4px 16px var(--color-shadow-menu); padding: var(--spacing-sm); width: 200px; opacity: 0; visibility: hidden; transform: translateX(-8px); transition: opacity var(--transition-fast), transform var(--transition-fast), visibility var(--transition-fast); pointer-events: none; } .sidebar-preview.visible { opacity: 1; visibility: visible; transform: translateX(0); } .sidebar-preview-title { font-size: var(--font-size-sm); font-weight: var(--font-weight-bold); margin-bottom: var(--spacing-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sidebar-preview-screenshot { width: 100%; height: auto; border-radius: var(--radius-sm); display: block; } lucide-icon { font-size: var(--size-icon-sm); cursor: pointer; font-weight: var(--font-weight-bold); } #root { flex: 1; display: flex; overflow-x: auto; overflow-y: hidden; scroll-behavior: smooth; scroll-snap-type: x mandatory; position: relative; /* For overview overlay positioning */ } #footer { display: none; /* Hidden by default, shown when keyboard is active */ height: var(--keyboard-height); padding: 0; background: var(--bg-footer); } #footer.visible { display: block; } #keyboard-frame { width: 100%; height: 100%; border: none; } /* Media panel (local + remote controls) */ #media-panel { position: fixed; bottom: 0; left: var(--sidebar-width); width: var(--size-panel-width); z-index: var(--z-panel); background: var(--bg-menu); box-shadow: 4px -4px 16px var(--color-shadow-menu); border-radius: var(--radius-md) var(--radius-md) 0 0; transform: translateY(100%); transition: transform var(--transition-fast), visibility var(--transition-fast); visibility: hidden; pointer-events: none; } #media-panel.open { transform: translateY(0); visibility: visible; pointer-events: auto; } #media-panel media-control { border-bottom: 1px solid var(--color-border); } #media-panel media-control:last-child { border-bottom: none; } /* Each panel is a full-viewport-width container that holds a split tree */ .panel { position: relative; /* For absolutely positioned resize handles */ display: grid; gap: var(--spacing-sm); width: calc(100vw - var(--sidebar-width)); height: 100%; scroll-snap-align: start; padding: var(--spacing-sm); /* Grid template is set dynamically by LayoutManager */ } /* Disable pointer events on webviews during resize */ body.resizing web-view { pointer-events: none; } /* Resize handles between split views */ .resize-handle { z-index: var(--z-local-ui); background: transparent; transition: background var(--transition-fast); } .resize-handle:hover { background: var(--color-resize-handle-hover); } .resize-handle-horizontal { cursor: col-resize; } .resize-handle-vertical { cursor: row-resize; } #notifications-icon-container { position: relative; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: var(--spacing-xs) 0; } #notifications-icon { opacity: var(--opacity-muted); transition: opacity var(--transition-fast); } #notifications-icon-container:hover #notifications-icon { opacity: 1; } #notifications-badge { position: absolute; top: 0; right: -0.1em; min-width: 1em; height: 1em; border-radius: 0.5em; background: var(--color-danger); color: var(--color-text-on-header); font-size: var(--font-size-xs); font-weight: var(--font-weight-bold); display: flex; align-items: center; justify-content: center; padding: 0 var(--spacing-xs); } #notifications-badge.hidden { display: none; } #media-icon.hidden { display: none; } /* Pairing dialog */ #pairing-dialog, #p2p-open-dialog { position: fixed; z-index: 10000; background: var(--bg-menu); color: var(--color-text-menu); border: 1px solid var(--color-border); border-radius: 12px; padding: 1.5rem; min-width: 320px; max-width: 90vw; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); } #pairing-dialog::backdrop, #p2p-open-dialog::backdrop { background: rgba(0, 0, 0, 0.6); z-index: 9999; } #pairing-dialog h2, #p2p-open-dialog h2 { font-size: 1.1rem; margin: 0 0 1rem; } .pairing-request-item { padding: 0.75rem; margin: 0.5rem 0; background: var(--bg-webview); border-radius: 8px; } .pairing-request-name { font-weight: bold; } .pairing-request-id { font-size: 0.75rem; opacity: 0.7; word-break: break-all; margin-bottom: 0.5rem; } .pairing-request-buttons { display: flex; gap: 0.5rem; } .pairing-request-buttons button { padding: 0.4rem 1rem; border: none; border-radius: 6px; cursor: pointer; font-size: 0.85rem; } .btn-accept { background: #2d7a2d; color: white; } .btn-reject { background: #7a2d2d; color: white; } .btn-close-dialog { margin-top: 1rem; padding: 0.5rem 1.5rem; background: transparent; border: 1px solid var(--color-border); color: inherit; border-radius: 6px; cursor: pointer; }