@font-face { font-family: "Lexend"; src: url("Lexend-Regular.ttf") format("truetype"); } body { font-family: "Lexend", sans-serif; line-height: 1.6; margin: 0; padding: 0; background-color: #0f1a2e; color: #c9d2d9; } /* SVG icon baseline */ .icon { width: 1em; height: 1em; display: inline-block; fill: currentColor; vertical-align: -0.125em; } .icon + span { margin-left: 4px; } header { background-color: #070d19; color: #c9d2d9; text-align: center; padding: 1rem 0; } header h1 { margin: 0; } main { width: 95%; margin: 20px auto; padding: 20px; background-color: #2d3749; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 25px; } section { margin-bottom: 20px; } section h2 { background-color: #070d19; color: #c9d2d9; padding: 10px; margin-top: 0; border-radius: 20px; } section h3 { background-color: #070d19; color: #c9d2d9; padding: 5px; margin-top: 0; border-radius: 15px; } a { color: #008fd5; } p, table { margin: 10px 0; } table { width: 100%; } /* Sticky header for tables in main content and search */ .sticky-header thead th { position: sticky; top: 0; z-index: 5; background: #0f1a2e; /* match existing th background */ box-shadow: 0 2px 0 rgba(0, 0, 0, 0.15); } /* Ensure sticky header paints above body cells when scrolled */ /* Note: sticking individual th cells is more broadly compatible */ /* Ensure the main content does not create its own scroll container, so sticky headers stick to the viewport while the page scrolls. */ #main-pane { overflow: visible !important; } /* Avoid horizontal scroll in Search results; allow smart wrapping */ .search-results table { table-layout: fixed; width: 100%; border-collapse: separate; border-spacing: 0; } .search-results th, .search-results td { word-break: break-word; overflow-wrap: anywhere; } .search-results .preview-holder, .search-results .preview-holder * { max-width: 100% !important; } .search-results .preview-video, .search-results .preview-audio, .search-results iframe { width: 100% !important; max-width: 100% !important; } /* Apply the same smart resizing to My Files results */ #content-details table { table-layout: fixed; width: 100%; border-collapse: separate; border-spacing: 0; } #content-details th, #content-details td { word-break: break-word; overflow-wrap: anywhere; } #content-details .preview-holder, #content-details .preview-holder * { max-width: 100% !important; } #content-details .preview-video, #content-details .preview-audio, #content-details iframe { width: 100% !important; max-width: 100% !important; } span { vertical-align: middle; } th, td { text-align: left; padding: 8px; border: 1px solid #4c5154; vertical-align: middle; } span.clickable-delete { color: #008fd5; cursor: pointer; text-decoration: underline; } span.clickable-delete:hover { color: tomato; cursor: pointer; text-decoration: underline; } span.clickable-metadata { color: #008fd5; cursor: pointer; text-decoration: underline; } span.clickable-metadata:hover { color: #ffaa00; cursor: pointer; text-decoration: underline; } th { background-color: #0f1a2e; } /* Subtle icon button inside table headers */ .table-header-toggle { background: transparent; color: #c9d2d9; border: 1px solid transparent; padding: 2px 4px; margin-left: 6px; border-radius: 6px; cursor: pointer; } .table-header-toggle:hover { background: #182746; border-color: #2a3a5d; color: #ffffff; } .table-header-toggle .icon { width: 14px; height: 14px; } /* Sort header buttons appear like plain text with hover */ .table-sort { background: transparent; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; } .table-sort.is-sorted .sort-indicator { font-weight: 600; } .table-sort:hover { text-decoration: underline; } tr:nth-child(odd) { background-color: #3d4452; } footer { text-align: center; padding: 20px; background-color: #070d19; color: #c9d2d9; position: fixed; bottom: 0; width: 100%; } button { background-color: #008fd5; color: #c9d2d9; padding: 10px 10px; border: none; cursor: pointer; border-radius: 15px; vertical-align: middle; } select { background-color: #008fd5; color: #c9d2d9; padding: 5px 5px; border: none; cursor: pointer; border-radius: 10px; vertical-align: middle; } img { margin-right: 5px; vertical-align: middle; } .filter-checkbox label { margin-right: 20px; } .pagination-controls { max-width: 100%; overflow-x: auto; white-space: nowrap; display: block; margin: 10px 0; text-align: center; color: #c9d2d9; } .pagination-controls a, .pagination-controls span { margin: 0 5px; color: #008fd5; cursor: pointer; text-decoration: underline; } .pagination-controls a:hover { color: #ffaa00; } .pagination-controls .current-page { text-decoration: none; font-weight: bold; cursor: default; color: #c9d2d9; } #volume-table td { text-align: right; font-family: monospace; } #menu-list { text-align: center; } #search-button { padding: 5px 10px; border-radius: 10px; margin-right: 10px; } #info-details, #account-details, #content-details p { text-align: center; } /* Layout for sidebar + main content */ #app-shell { display: flex; gap: 16px; position: relative; /* for reveal button positioning */ } #sidebar { width: 280px; min-width: 220px; max-width: 320px; transition: width 0.2s ease-in-out; overflow: hidden; } #main-pane { flex: 1 1 auto; min-width: 0; /* prevent overflow */ } /* Collapsed state */ #app-shell.is-collapsed #sidebar { width: 0; min-width: 0; border: 0; } #app-shell.is-collapsed #sidebar > * { display: none; } /* Sidebar banner and tree basic styling */ .sidebar-banner { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; } .file-tree { font-size: 14px; } .tree-line { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 2px 0; } .tree-toggle { background: transparent; border: none; color: #c9d2d9; cursor: pointer; padding: 0; width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; } .tree-toggle .icon { width: 14px; height: 14px; transition: transform 0.15s ease-in-out; } .tree-line[aria-expanded="true"] .tree-toggle .icon { transform: rotate(90deg); } .tree-label { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tree-count { opacity: 0.8; } .tree-children { margin-left: 16px; display: none; } .tree-children.expanded { display: block; } /* Icon button minimal style for topbar */ .icon-button { background: #008fd5; color: #c9d2d9; border: none; border-radius: 10px; padding: 6px 10px; cursor: pointer; } /* Active/toggled state uses bright blue like Authenticate */ .icon-button[aria-pressed="true"] { background: #1f6feb; color: #ffffff; } /* Reveal button shown only when collapsed */ .sidebar-reveal { position: absolute; left: 8px; top: 8px; z-index: 2; } #user-info { padding: 10px; } #user-details p, #wallet-info h3, #wallet-info p { margin: 5px 0; } #user-avatar { width: 100px; height: 100px; margin-top: 10px; } #login-prompt { text-align: center; } /* Header auth area (name switcher) */ header { display: flex; align-items: center; justify-content: space-between; padding: 1rem; text-align: left; } #auth-controls { display: flex; align-items: center; gap: 10px; } .auth-button { background-color: #1f6feb; color: #fff; border: none; border-radius: 8px; padding: 8px 12px; font-size: 14px; cursor: pointer; } .auth-button:hover { box-shadow: 0 0 0 2px rgba(31, 111, 235, 0.35); } .auth-button[disabled] { opacity: 0.6; cursor: not-allowed; } .name-switcher { display: flex; align-items: center; gap: 8px; } .name-select { background-color: #0f1a2e; color: #c9d2d9; border: 1px solid #4c5154; border-radius: 8px; padding: 6px 10px; font-size: 14px; } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; } /* Non-blocking loading indicator (no dimming, no input blocking) */ #loading-overlay { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); display: none; align-items: center; justify-content: center; flex-direction: column; gap: 6px; padding: 10px 12px; background: rgba(7, 13, 25, 0.7); border-radius: 12px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45); z-index: 1000; pointer-events: none; /* allow interacting with the app while loading */ } .spinner-img { width: 72px; height: 72px; animation: qdn-spin 1.1s linear infinite; filter: drop-shadow(0 0 8px rgba(0, 0, 0, 0.35)); } .spinner-label { font-size: 12px; opacity: 0.9; } @keyframes qdn-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Improved image preview sizing */ img.preview-image { max-height: 100px; max-width: 100%; height: auto; width: auto; object-fit: contain; cursor: zoom-in; } /* Image viewer overlay */ #image-viewer-overlay { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.9); z-index: 1100; } #image-viewer-overlay img { max-width: 95vw; max-height: 95vh; object-fit: contain; box-shadow: 0 0 20px rgba(0, 0, 0, 0.6); border-radius: 6px; cursor: zoom-out; } #image-viewer-overlay .close-hint { position: absolute; bottom: 18px; color: #c9d2d9; font-size: 13px; opacity: 0.8; } /* Identifier action icons */ .action-icon { width: 15px; height: 15px; vertical-align: middle; margin-left: 6px; cursor: pointer; filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.25)); } .identifier-text { margin-right: 4px; color: #008fd5; cursor: pointer; text-decoration: underline; } .identifier-text:hover { color: #ffaa00; text-decoration: underline; } /* Service filter chips */ .chips-container { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; } .chip { display: inline-flex; align-items: center; gap: 6px; border: 1px solid #4c5154; color: #c9d2d9; background: #0f1a2e; padding: 4px 10px; border-radius: 999px; cursor: pointer; user-select: none; font-size: 13px; } .chip .count { background: #1f6feb; color: #fff; border-radius: 999px; padding: 0 6px; font-size: 12px; line-height: 18px; } .chip.selected { border-color: #1f6feb; background: #12345a; } /* Compact jump-to-page controls */ .jump-to-page { display: inline-flex; align-items: center; gap: 6px; margin-left: 10px; } .jump-to-page input[type="number"] { width: 80px; padding: 2px 6px; } .jump-to-page button { padding: 2px 8px; } /* Bulk-delete mode visibility rules */ .bulk-select { display: none; vertical-align: middle; margin-right: 6px; } body.bulk-mode .bulk-select { display: inline-block; } body.bulk-mode .clickable-delete { display: none; } th .select-all-label { margin-left: 6px; font-weight: 500; font-size: 12px; } /* === App shell layout === */ .topbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 12px; border-bottom: 1px solid #22314d; background: #0b1426; } .topbar-left { display: flex; align-items: center; gap: 8px; } .topbar-right { display: flex; align-items: center; gap: 8px; } /* Publish dropdown */ .publish-menu { position: relative; } .publish-dropdown { position: absolute; right: 0; top: calc(100% + 4px); background: #0b1426; border: 1px solid #22314d; border-radius: 8px; padding: 6px; min-width: 180px; display: none; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35); z-index: 3; } .publish-menu.open .publish-dropdown { display: block; } .publish-item { display: block; width: 100%; background: transparent; color: #c9d2d9; text-align: left; padding: 6px 8px; border: 1px solid transparent; border-radius: 6px; cursor: pointer; } .publish-item:hover { background: #182746; border-color: #2a3a5d; } .app-title { font-weight: 650; letter-spacing: 0.2px; font-size: 18px; } .icon-button { background: transparent; border: 1px solid transparent; color: #c9d2d9; cursor: pointer; padding: 4px 8px; border-radius: 8px; transition: box-shadow 0.15s ease-in-out, background 0.15s ease-in-out, border-color 0.15s ease-in-out; } .icon-button:hover { background: #182746; border-color: #2a3a5d; box-shadow: 0 0 0 2px rgba(31, 111, 235, 0.35); } /* Search icon default: use hover background even when idle */ #search-button { background: #182746; border-color: #2a3a5d; } #search-button[aria-pressed="true"] { background: #1f6feb; border-color: #1f6feb; color: #ffffff; } /* Deleted toggle (trash icon) */ .deleted-toggle { position: relative; } /* When hideDeleted is ON (aria-pressed=true), show a slash overlay */ .deleted-toggle[aria-pressed="true"]::after { content: ""; position: absolute; left: 6px; right: 6px; top: 50%; height: 2px; background: #ff5d5d; transform: rotate(-25deg); box-shadow: 0 0 2px rgba(0, 0, 0, 0.4); pointer-events: none; } /* Showing deleted (pressed=false): bright enabled blue */ .deleted-toggle[aria-pressed="false"] { background: #1f6feb; border-color: #1f6feb; color: #ffffff; } /* Hiding deleted (pressed=true): regular neutral button color + slash */ .deleted-toggle[aria-pressed="true"] { background: #182746; border-color: #2a3a5d; color: #c9d2d9; } /* Layout for sidebar + main */ #app-shell { display: flex; min-height: calc(100vh - 48px); } #sidebar { width: 280px; border-right: 1px solid #22314d; padding: 8px; box-sizing: border-box; overflow: auto; } #main-pane { flex: 1; padding: 12px; overflow: auto; } .sidebar-banner { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; } .sidebar-context, .sidebar-exit { font-size: 12px; padding: 4px 8px; border-radius: 8px; border: 1px solid #2a3a5d; background: #101c34; color: #c9d2d9; } .sidebar-context:hover, .sidebar-exit:hover { box-shadow: 0 0 0 2px rgba(31, 111, 235, 0.35); } .sidebar-context[data-active="true"] { background: #1f6feb; border-color: #1f6feb; color: #ffffff; } .sidebar-context[disabled] { opacity: 0.85; } /* Search: Group-by-Name toggle styling */ #sidebar-sort-by-name { background: #101c34; border: 1px solid #2a3a5d; color: #c9d2d9; } #sidebar-sort-by-name[aria-pressed="true"] { background: #1f6feb; border-color: #1f6feb; color: #ffffff; } /* File tree */ .file-tree { list-style: none; margin: 0; padding: 0; } .tree-node { margin: 2px 0; } .tree-line { display: flex; align-items: center; gap: 6px; cursor: pointer; padding: 4px 6px; border-radius: 8px; } .tree-line:hover { background: #162645; } .tree-toggle { width: 16px; height: 16px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #2a3a5d; border-radius: 4px; background: #0f1a2e; color: #9fb3c8; font-size: 11px; } .tree-label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Small avatar shown for search-mode leaves */ .tree-avatar { width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; border-radius: 50%; background: #1f2c49; color: #c9d2d9; } .tree-avatar-img, .avatar-img { width: 24px; height: 24px; border-radius: 50%; object-fit: cover; display: block; } .name-with-avatar { display: inline-flex; align-items: center; gap: 6px; } .tree-count { font-size: 11px; opacity: 0.8; } .tree-children { margin-left: 16px; padding-left: 8px; border-left: 1px dashed #2a3a5d; display: none; } .tree-children.expanded { display: block; } .viewer-panel { border: 1px solid #22314d; border-radius: 12px; padding: 8px; background: #0b1426; margin-bottom: 12px; } /* Hide legacy chips area when tree is present */ #service-chips-container { display: none !important; } /* Preview page */ .preview-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; } .preview-title { font-weight: 600; opacity: 0.9; } /* Global media controls (header) */ .media-controls { display: inline-flex; align-items: center; gap: 6px; padding: 0 8px; border-left: 1px solid #22314d; margin-right: 8px; } .media-title { max-width: 240px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; opacity: 0.9; font-size: 12px; } /* Active pagination styling */ .pagination-controls .is-active { font-weight: 700; text-decoration: underline; } .pagination-controls [aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; } /* === Search page === */ .search-form { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; margin-bottom: 10px; padding: 8px; border: 1px solid #22314d; border-radius: 12px; background: #0b1426; } .search-form .form-row { display: flex; flex-direction: column; gap: 4px; } .search-form .form-row.small { flex-direction: row; align-items: center; gap: 12px; } .search-form label { font-size: 12px; opacity: 0.9; } .search-form input[type="text"], .search-form select { background: #0f1a2e; color: #c9d2d9; border: 1px solid #2a3a5d; border-radius: 8px; padding: 6px 8px; min-width: 220px; } .search-summary { margin: 6px 0 10px 0; opacity: 0.9; } .search-results table { width: 100%; } .search-results .open-preview { cursor: pointer; color: #008fd5; text-decoration: underline; } .search-results .open-preview:hover { color: #ffaa00; } .search-more { margin: 8px 0; } /* Compose page */ #compose-page .compose-form .form-row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; } #compose-page input[type="text"], #compose-page textarea { background: #0f1a2e; color: #c9d2d9; border: 1px solid #2a3a5d; border-radius: 8px; padding: 8px; } #compose-page .metadata-summary { font-size: 12px; opacity: 0.8; margin-left: 8px; } /* === Service combobox === */ .service-combobox { position: relative; display: flex; align-items: stretch; gap: 6px; } .service-combobox input[type="text"] { flex: 1 1 auto; } .service-combobox-button { background: #0f1a2e; color: #c9d2d9; border: 1px solid #2a3a5d; border-radius: 8px; padding: 0 8px; cursor: pointer; } .service-combobox-button:hover { background: #182746; border-color: #2a3a5d; } .service-combobox-list { position: absolute; left: 0; right: 0; top: calc(100% + 4px); background: #0b1426; border: 1px solid #22314d; border-radius: 8px; max-height: 220px; overflow-y: auto; z-index: 20; display: none; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35); } .service-combobox.open .service-combobox-list { display: block; } .service-combobox-item { padding: 6px 10px; cursor: pointer; white-space: nowrap; } .service-combobox-item:hover, .service-combobox-item[aria-selected="true"] { background: #182746; }