:root { --app-font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; --topbar: 50px; --statusbar: 34px; --sidebar: 270px; --torrent-progress-complete: #198754; } [data-bs-theme="dark"] { --bs-body-bg: #05070a; --bs-body-bg-rgb: 5, 7, 10; --bs-body-color: #d6dde8; --bs-secondary-bg: #0a0f16; --bs-secondary-bg-rgb: 10, 15, 22; --bs-tertiary-bg: #0e141d; --bs-border-color: #1d2734; --bs-secondary-color: #8d98aa; --bs-primary-bg-subtle: #0d2238; --bs-primary-text-emphasis: #9ecbff; --torrent-progress-complete: #2f9e75; } html[data-app-font="adwaita-mono"] { --app-font-family: "Adwaita Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; } html[data-app-font="inter"] { --app-font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; } html[data-app-font="system-ui"] { --app-font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; } html[data-app-font="source-sans-3"] { --app-font-family: "Source Sans 3", "Source Sans Pro", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; } html[data-app-font="jetbrains-mono"] { --app-font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; } html, body { height: 100%; } body { overflow: hidden; font-size: 13px; padding: 8px; background: #05070a; font-family: var(--app-font-family); } .app-shell { height: calc(100vh - 16px); display: grid; grid-template-rows: var(--topbar) 1fr var(--statusbar); background: var(--bs-body-bg); border: 1px solid var(--bs-border-color); border-radius: 12px; overflow: hidden; box-shadow: 0 12px 45px rgba(0, 0, 0, 0.38); } .topbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.42rem 0.7rem; min-height: var(--topbar); background: var(--bs-secondary-bg); } .toolbar-left, .toolbar-right { display: flex; align-items: center; gap: 0.45rem; min-width: 0; } .toolbar-left { flex: 0 1 auto; overflow: hidden; } .toolbar-right { flex: 1 1 0; justify-content: flex-end; margin-left: auto; } .brand { font-weight: 800; font-size: 1.05rem; letter-spacing: 0.2px; white-space: nowrap; line-height: 32px; } .profile-picker-btn { max-width: 180px; } .profile-picker-btn span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .profile-select { width: 100%; } .search { width: min(38vw, 420px); min-width: clamp(160px, 20vw, 220px); max-width: 420px; flex: 0 1 420px; } .mobile-speed-stats { display: none; align-items: center; gap: 0.45rem; flex: 0 0 auto; color: var(--bs-secondary-color); font-size: 0.72rem; white-space: nowrap; } .mobile-speed-stats b { color: var(--bs-body-color); font-weight: 700; } .topbar .form-control, .topbar .form-select { height: 32px; line-height: 1.15; } .topbar .btn { min-height: 28px; line-height: 1; } #themeToggle, #mobileToggle { width: 32px; min-width: 32px; display: inline-flex; align-items: center; justify-content: center; } .spinner-border-xs { width: 0.75rem; height: 0.75rem; border-width: 0.12em; vertical-align: -1px; } .global-loader { position: fixed; right: 14px; bottom: 44px; z-index: 7000; display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.65rem; border-radius: 999px; background: var(--bs-tertiary-bg); color: var(--bs-body-color); border: 1px solid var(--bs-border-color); box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35); } .initial-loader { position: fixed; inset: 0; z-index: 9000; display: grid; place-items: center; padding: 1rem; background: radial-gradient( circle at 50% 35%, rgba(var(--bs-secondary-bg-rgb), 0.98), var(--bs-body-bg) 68% ); color: var(--bs-body-color); transition: opacity 0.22s ease, visibility 0.22s ease; } .initial-loader.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; } .initial-loader-card { width: min(92vw, 430px); padding: 2rem; border: 1px solid var(--bs-border-color); border-radius: 18px; background: rgba(var(--bs-secondary-bg-rgb), 0.88); box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48); text-align: center; } .initial-loader-brand { font-size: 1.35rem; font-weight: 800; letter-spacing: 0.2px; } .initial-loader-spinner { margin: 1.4rem 0 1rem; } .initial-loader-title { font-size: 1rem; font-weight: 700; } .initial-loader-text { margin-top: 0.35rem; color: var(--bs-secondary-color); } .main-grid { min-height: 0; display: grid; grid-template-columns: var(--sidebar) 1fr; } .sidebar { padding: 0.65rem; overflow: auto; background: rgba(var(--bs-secondary-bg-rgb), 0.9); } .filter { width: 100%; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.15rem 0.55rem; align-items: center; margin-bottom: 0.2rem; padding: 0.45rem 0.6rem; border: 0; border-radius: 0.55rem; background: transparent; color: var(--bs-body-color); text-align: left; } .filter:hover, .filter.active { background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); } .filter > span:first-child { min-width: 0; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .filter > span:last-child { min-width: 0; max-width: 12rem; text-align: right; } .filter-count { display: block; font-weight: 700; line-height: 1.1; } .filter-meta { display: block; margin-top: 0.05rem; color: var(--bs-secondary-color); font-size: 0.68rem; font-weight: 400; line-height: 1.15; opacity: 0.72; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .filter.active .filter-meta, .filter:hover .filter-meta { color: var(--bs-primary-text-emphasis); opacity: 0.78; } .shortcut { font-size: 0.78rem; color: var(--bs-secondary-color); padding: 0.15rem 0.5rem; } .content { min-width: 0; min-height: 0; display: grid; grid-template-rows: minmax(0, 1fr) 255px; position: relative; } .table-wrap { overflow: auto; contain: content; } .torrent-table { margin: 0; white-space: nowrap; table-layout: auto; } .torrent-table thead th { position: sticky; top: 0; z-index: 2; background: var(--bs-tertiary-bg); border-bottom: 1px solid var(--bs-border-color); user-select: none; } .torrent-table thead th[data-sort] { cursor: pointer; } .torrent-table thead th[data-sort]:hover, .torrent-table thead th.sorted { color: var(--bs-primary-text-emphasis); } .sort-icon { opacity: 0.85; } .torrent-table tbody tr { cursor: default; height: 36px; } .torrent-table tbody tr.selected td { background: var(--bs-primary-bg-subtle); } .torrent-table .sel { width: 34px; text-align: center; } .torrent-table .name { min-width: 280px; max-width: 520px; overflow: hidden; text-overflow: ellipsis; } .torrent-table .path { max-width: 360px; overflow: hidden; text-overflow: ellipsis; color: var(--bs-secondary-color); } .virtual-spacer td { padding: 0 !important; border: 0 !important; } .empty { height: 120px; text-align: center; vertical-align: middle; color: var(--bs-secondary-color); } .progress.thin { height: 7px; min-width: 130px; margin-bottom: 1px; background: rgba(255, 255, 255, 0.08); } .details { grid-row: 2; grid-column: 1; min-height: 0; overflow: hidden; background: rgba(var(--bs-secondary-bg-rgb), 0.78); } .detail-pane { height: 210px; overflow: auto; padding: 0.65rem; } .loading-line { display: flex; align-items: center; gap: 0.5rem; color: var(--bs-secondary-color); padding: 0.75rem; } .muted-pane { color: var(--bs-secondary-color); } .detail-table { white-space: nowrap; } .general-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.6rem; } .general-grid div { border: 1px solid var(--bs-border-color); border-radius: 0.6rem; padding: 0.5rem; background: var(--bs-body-bg); min-width: 0; } .general-grid b { display: block; color: var(--bs-secondary-color); font-size: 0.72rem; text-transform: uppercase; } .general-grid span { overflow-wrap: anywhere; } .statusbar { display: flex; align-items: center; gap: 1rem; padding: 0 0.75rem; overflow-x: auto; background: var(--bs-tertiary-bg); color: var(--bs-secondary-color); white-space: nowrap; } .statusbar b { color: var(--bs-body-color); } .status-limit { border: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.9); color: var(--bs-secondary-color); border-radius: 0.45rem; padding: 0.12rem 0.5rem; white-space: nowrap; } .status-limit:hover { color: var(--bs-body-color); background: var(--bs-secondary-bg); } .ctx-menu { display: none; position: absolute; z-index: 5000; min-width: 200px; padding: 0.35rem; border: 1px solid var(--bs-border-color); border-radius: 0.6rem; background: var(--bs-body-bg); } .ctx-menu button { display: block; width: 100%; text-align: left; border: 0; background: transparent; color: var(--bs-body-color); padding: 0.42rem 0.55rem; border-radius: 0.4rem; } .ctx-menu button:hover { background: var(--bs-secondary-bg); } .ctx-menu .danger { color: var(--bs-danger); } .ctx-menu hr { margin: 0.25rem 0; border-color: var(--bs-border-color); } .profile-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.25rem 0.5rem; align-items: center; margin-bottom: 0.45rem; padding: 0.45rem; border: 1px solid var(--bs-border-color); border-radius: 0.6rem; background: rgba(var(--bs-secondary-bg-rgb), 0.58); } .profile-row.active { border-color: var(--bs-primary); background: var(--bs-primary-bg-subtle); } .profile-row span { grid-column: 1 / 2; color: var(--bs-secondary-color); overflow-wrap: anywhere; } .profile-actions, .profile-form-actions { display: inline-flex; gap: 0.35rem; flex-wrap: wrap; } .profile-form-grid { display: grid; grid-template-columns: minmax(150px, 1.1fr) minmax(260px, 2.1fr) minmax( 90px, 0.55fr ) minmax(120px, 0.75fr) minmax(145px, auto) auto; gap: 0.65rem; align-items: start; } .profile-form-field { display: grid; gap: 0.25rem; min-width: 0; } .profile-form-field > span:first-child { color: var(--bs-secondary-color); font-size: 0.72rem; font-weight: 700; line-height: 1.1; text-transform: uppercase; } .profile-form-field small { color: var(--bs-secondary-color); line-height: 1.25; } .profile-check-field .form-check { min-height: 31px; display: flex; align-items: center; gap: 0.45rem; } .flag-icon { border-radius: 2px; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.12); } .flag-code { color: var(--bs-secondary-color); margin-left: 0.25rem; } .modal-content { background: var(--bs-body-bg); border: 1px solid var(--bs-border-color); border-radius: 14px; } .modal-header, .modal-footer { background: rgba(var(--bs-secondary-bg-rgb), 0.82); border-color: var(--bs-border-color); } .add-grid { display: grid; gap: 0.85rem; } .magnet-box { min-height: 64px; resize: vertical; } .upload-box, .surface-section { border: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.5); border-radius: 0.75rem; padding: 0.75rem; } .section-title { font-weight: 700; margin-bottom: 0.55rem; color: var(--bs-body-color); } .preset-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.4rem; } .toast-host { position: fixed; right: 14px; top: 70px; z-index: 8000; display: grid; gap: 0.4rem; } .toast-item { padding: 0.45rem 0.65rem; border-radius: 0.55rem; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.28); max-width: 360px; } @media (max-width: 1100px) { :root { --topbar: 88px; } .topbar { align-items: flex-start; flex-wrap: wrap; } .toolbar-left { flex: 1 1 100%; overflow: visible; flex-wrap: wrap; } .toolbar-right { flex: 1 1 100%; justify-content: flex-end; } .search { flex: 1 1 220px; width: auto; min-width: 160px; max-width: none; } } @media (max-width: 900px) { :root { --sidebar: 0px; } .sidebar { display: none; } .general-grid { grid-template-columns: 1fr; } } @media (max-width: 640px) { :root { --topbar: 132px; } .toolbar-right { width: 100%; justify-content: flex-start; flex-wrap: nowrap; gap: 0.35rem; } .search { flex: 1 1 0; width: auto; min-width: 0; max-width: none; } .preset-grid { grid-template-columns: 1fr 1fr; } } .preferences-grid { display: grid; grid-template-columns: repeat(2, minmax(220px, 1fr)); gap: 0.75rem; } .form-field { display: grid; gap: 0.3rem; } .form-field > span { color: var(--bs-secondary-color); font-size: 0.78rem; font-weight: 700; text-transform: uppercase; } @media (max-width: 640px) { .preferences-grid { grid-template-columns: 1fr; } } .date-compact { white-space: nowrap; } .btn-xs { --bs-btn-padding-y: 0.18rem; --bs-btn-padding-x: 0.42rem; --bs-btn-font-size: 0.78rem; --bs-btn-border-radius: 0.35rem; } .nav-btn { border-radius: 0.45rem !important; margin: 0 !important; display: inline-flex; align-items: center; justify-content: center; gap: 0.25rem; } .nav-btn + .nav-btn, .torrent-action + .torrent-action { margin-left: 0.08rem !important; } .path-list { height: 360px; overflow: auto; border: 1px solid var(--bs-border-color); border-radius: 0.6rem; background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .path-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.42rem 0.6rem; border-bottom: 1px solid var(--bs-border-color); cursor: pointer; } .path-row:hover { background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); } .chips { display: flex; gap: 0.35rem; flex-wrap: wrap; } .chip { border: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.6); color: var(--bs-body-color); border-radius: 999px; padding: 0.22rem 0.6rem; font-size: 0.78rem; } .mobile-list { overflow: auto; padding: 0.55rem; background: var(--bs-body-bg); } .mobile-card { border: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.72); border-radius: 0.75rem; padding: 0.65rem; margin-bottom: 0.55rem; } .mobile-card.selected { outline: 2px solid var(--bs-primary); } .mobile-card .name { font-weight: 700; word-break: break-word; } .mobile-actions { display: flex; gap: 0.35rem; margin-top: 0.45rem; } #systemChart { width: 140px; height: 24px; border: 1px solid var(--bs-border-color); border-radius: 0.35rem; background: rgba(var(--bs-secondary-bg-rgb), 0.85); } .badge-degraded { background: #f59e0b !important; color: #111 !important; } body.mobile-mode .table-wrap, body.mobile-mode .details { display: none !important; } /* Notatka: scalone reguły listy mobilnej eliminują powtórzone selektory CSS. */ body.mobile-mode #mobileList { display: block !important; min-height: 0; height: 100%; overflow: auto; position: relative; z-index: 2; padding-top: 5.2rem !important; padding-bottom: 1rem; } body.mobile-mode .content { display: grid !important; grid-template-rows: minmax(0, 1fr) !important; min-height: 0; overflow: hidden; } body.mobile-mode .torrent-table { display: none; } body.mobile-mode .main-grid { min-height: 0; overflow: hidden; } @media (max-width: 640px) { .nav-btn span { display: none; } } .torrent-table td:nth-child(5) { min-width: 92px; width: 110px; white-space: nowrap; } .hidden-col { display: none !important; } .status-docs { margin-left: auto; color: inherit; text-decoration: none; font-weight: 600; opacity: 0.9; white-space: nowrap; } .status-docs:hover { opacity: 1; text-decoration: underline; } .column-check { padding: 0.35rem 0.5rem; border: 1px solid var(--bs-border-color); border-radius: 0.5rem; background: var(--bs-body-bg); } .label-filters .label-filter { font-size: 0.82rem; padding: 0.34rem 0.5rem; margin-bottom: 0.15rem; } .label-filters .label-filter i { opacity: 0.75; margin-right: 0.25rem; } .column-manager { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 0.55rem; } .column-card { display: flex; align-items: center; gap: 0.55rem; margin: 0; padding: 0.55rem 0.65rem; border: 1px solid var(--bs-border-color); border-radius: 0.7rem; background: rgba(var(--bs-secondary-bg-rgb), 0.45); cursor: pointer; user-select: none; transition: background 0.15s, border-color 0.15s, transform 0.15s; } .column-card:hover, .column-card.active { background: var(--bs-primary-bg-subtle); } .column-card:hover { border-color: var(--bs-primary); } .column-card.active { border-color: rgba(var(--bs-primary-rgb), 0.55); } .column-card .form-check-input { margin: 0; } .column-card .form-check-label { display: flex; align-items: center; gap: 0.45rem; font-weight: 600; } .column-card i { opacity: 0.72; } .path-row::before { content: "\f07b"; font-family: "Font Awesome 6 Free"; font-weight: 900; color: var(--bs-warning); } body.mobile-mode .mobile-card { display: block; } .mobile-card .mobile-actions button { min-width: 34px; } #toolSmart .form-label { font-size: 0.75rem; color: var(--bs-secondary-color); margin-bottom: 0.2rem; } #toolSmart .btn { padding: 0.25rem 0.55rem; border-radius: 0.5rem; white-space: nowrap; } #toolSmart .row .d-flex { align-items: end; justify-content: flex-start; } #trafficHistoryChart { width: 100%; height: 420px; border: 1px solid var(--bs-border-color); border-radius: 0.75rem; background: var(--bs-body-bg); } @media (max-width: 992px) { .profile-form-grid { grid-template-columns: 1fr; } .profile-form-grid .btn { width: 100%; } } .history-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; } .history-card { border: 1px solid var(--bs-border-color); border-radius: 0.8rem; background: rgba(var(--bs-secondary-bg-rgb), 0.35); padding: 0.75rem; min-width: 0; overflow: hidden; } .history-title { font-weight: 700; font-size: 0.9rem; margin-bottom: 0.45rem; color: var(--bs-body-color); } #trafficHistoryChart, #trafficSpeedChart { display: block; width: 100%; height: 420px; max-width: 100%; border: 0; border-radius: 0.55rem; background: var(--bs-body-bg); } @media (min-width: 992px) { .history-grid { grid-template-columns: 1fr; } } .empty-mini { padding: 0.7rem 0.8rem; border: 1px dashed var(--bs-border-color); border-radius: 0.7rem; color: var(--bs-secondary-color); background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .label-manager-row { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; border: 1px solid var(--bs-border-color); border-radius: 0.65rem; padding: 0.4rem 0.5rem; margin-bottom: 0.4rem; background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .tool-tab i { margin-right: 0.25rem; opacity: 0.82; } @media (max-width: 640px) { .history-card { padding: 0.5rem; } #trafficHistoryChart, #trafficSpeedChart { height: 320px; } .statusbar { font-size: 0.75rem; gap: 0.6rem; } .mobile-list { padding: 0.45rem; } .mobile-card { margin-bottom: 0.45rem; } } .torrent-progress { height: 16px; min-width: 92px; position: relative; margin: 0; overflow: hidden; background: rgba(var(--bs-secondary-bg-rgb), 0.8) !important; } .torrent-progress .progress-bar { min-width: 0 !important; position: relative; transition: width 0.25s ease, background-color 0.25s ease; } .torrent-progress > span { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; line-height: 1; color: var(--bs-body-color); text-shadow: none; white-space: nowrap; pointer-events: none; } .torrent-progress .progress-bar + span { color: var(--bs-body-color); } @media (max-width: 700px) { body:not(.desktop-mode) .table-wrap { display: none !important; } body:not(.desktop-mode) #mobileList { display: block !important; min-height: 260px; height: 100%; overflow: auto; } body:not(.desktop-mode) .content { display: grid !important; grid-template-rows: minmax(0, 1fr) !important; min-height: 0; overflow: hidden; } body:not(.desktop-mode) .details { display: none !important; } } .pager-row { display: flex; align-items: center; justify-content: flex-end; gap: 0.5rem; } .peers-refresh { display: flex; align-items: center; gap: 0.5rem; justify-content: flex-end; padding: 0.35rem 0.75rem; border-bottom: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .peers-refresh select { width: auto; min-width: 96px; } @media (max-width: 900px) { body:not(.modal-open) .table-wrap { display: none !important; } body:not(.modal-open) #mobileList { display: block !important; height: 100% !important; min-height: 260px; overflow: auto; } body:not(.modal-open) .content { display: grid !important; grid-template-rows: minmax(0, 1fr) !important; min-height: 0; overflow: hidden; } body:not(.modal-open) .details { display: none !important; } } .torrent-paused td { opacity: 0.82; } .torrent-paused .name { font-style: italic; } @media (max-width: 900px) { .main-grid { display: grid !important; grid-template-columns: minmax(0, 1fr) !important; min-height: 0 !important; height: 100% !important; overflow: hidden !important; } .sidebar { display: none !important; } .content { display: grid !important; grid-template-rows: minmax(0, 1fr) !important; min-height: 0 !important; height: 100% !important; overflow: hidden !important; } .table-wrap { display: none !important; } #mobileList { display: block !important; height: 100% !important; min-height: 0 !important; overflow: auto !important; position: relative !important; z-index: 10 !important; background: var(--bs-body-bg) !important; padding: 0.55rem !important; } .details { display: none !important; } .toolbar-right { width: 100% !important; min-width: 0 !important; flex-wrap: nowrap !important; gap: 0.35rem !important; } .search { min-width: 0 !important; width: auto !important; flex: 1 1 0 !important; max-width: none !important; } .mobile-speed-stats { display: inline-flex; } } @media (max-width: 640px) { .toolbar-right { flex-wrap: nowrap !important; gap: 0.3rem !important; } .search { min-width: 0 !important; width: auto !important; flex: 1 1 0 !important; max-width: none !important; } .mobile-speed-stats { gap: 0.25rem; font-size: 0.66rem; } } .files-toolbar { display: flex; gap: 0.75rem; align-items: center; justify-content: space-between; flex-wrap: wrap; margin-bottom: 0.5rem; } .file-priority-table .path { max-width: 520px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .file-priority-table .file-priority { min-width: 110px; } @media (max-width: 900px) { .files-toolbar { align-items: stretch; } .files-toolbar .btn-group { display: grid; grid-template-columns: 1fr; width: 100%; } .file-priority-table { font-size: 0.82rem; } .file-priority-table .path { max-width: 180px; } } .bulk-bar { height: 38px; display: flex; align-items: center; gap: 0.35rem; flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; padding: 0.35rem 0.55rem; border-bottom: 1px solid var(--bs-border-color); background: rgba(var(--bs-secondary-bg-rgb), 0.95); z-index: 4; } .bulk-bar.d-none { display: none !important; } .bulk-bar span { color: var(--bs-secondary-color); margin-right: 0.3rem; white-space: nowrap; } .bulk-bar .btn { white-space: nowrap; flex: 0 0 auto; } .move-options { border: 1px solid var(--bs-border-color); border-radius: 0.6rem; padding: 0.75rem; background: var(--bs-tertiary-bg); } #bulkBar { grid-row: 1; grid-column: 1; align-self: start; } #tableWrap, #mobileList { grid-row: 1; grid-column: 1; min-height: 0; } .bulk-bar:not(.d-none) + .table-wrap { padding-top: 38px; } @media (max-width: 900px) { .bulk-bar { gap: 0.3rem; } } .label-mini { font-size: 0.72rem; padding: 0.12rem 0.38rem; margin-right: 0.15rem; } .label-chip.active { border-color: var(--bs-primary); background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); } .label-selected { border-color: var(--bs-primary); background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); } .automation-shell { display: grid; gap: 0.75rem; } .automation-main-card { padding: 0.75rem; border: 1px solid var(--bs-border-color); border-radius: 0.75rem; background: var(--bs-body-bg); } .automation-card-title { margin-bottom: 0.5rem; font-weight: 700; } .automation-rule-grid, .automation-builder-grid { display: grid; grid-template-columns: repeat(4, minmax(160px, 1fr)); gap: 0.5rem; align-items: center; } .automation-enabled, .automation-negate { margin: 0; padding: 0.45rem 0.6rem 0.45rem 2.5rem; border: 1px solid var(--bs-border-color); border-radius: 0.5rem; } .automation-path-input { grid-column: span 2; } .automation-chip-list { display: flex; flex-wrap: wrap; gap: 0.45rem; } .automation-chip { display: inline-flex; align-items: center; gap: 0.35rem; max-width: 100%; padding: 0.25rem 0.5rem; border: 1px solid var(--bs-border-color); border-radius: 999px; background: var(--bs-tertiary-bg); font-size: 0.82rem; } .automation-actions, .automation-row-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; } .automation-row { display: flex; justify-content: space-between; gap: 0.75rem; align-items: center; padding: 0.55rem 0.65rem; border: 1px solid var(--bs-border-color); border-radius: 0.6rem; margin-bottom: 0.45rem; background: var(--bs-body-bg); } .automation-row-main { min-width: 0; } .automation-action-pill { display: inline-flex; max-width: 100%; margin: 0.1rem; padding: 0.15rem 0.4rem; border-radius: 999px; background: var(--bs-secondary-bg); font-size: 0.78rem; white-space: normal; } .automation-history-toolbar { display: flex; justify-content: flex-end; margin-bottom: 0.5rem; } .automation-history-details { max-width: min(620px, 60vw); } .automation-history-details summary { cursor: pointer; list-style-position: inside; } .automation-history-details pre, .automation-history-raw { max-width: 100%; max-height: 220px; margin: 0.35rem 0 0; padding: 0.5rem; overflow: auto; border: 1px solid var(--bs-border-color); border-radius: 0.5rem; background: var(--bs-tertiary-bg); white-space: pre-wrap; word-break: break-word; } @media (max-width: 900px) { .automation-rule-grid, .automation-builder-grid { grid-template-columns: 1fr; } .automation-path-input, .automation-history-details { grid-column: auto; max-width: 100%; } .automation-history-toolbar { justify-content: flex-start; } } .disk-status { display: inline-flex; align-items: center; gap: 0.35rem; min-width: 110px; } .disk-status canvas { border-radius: 999px; background: rgba(var(--bs-secondary-bg-rgb), 0.65); } .disk-status.disk-warn b { color: var(--bs-warning) !important; } .system-chart { width: 96px; height: 24px; border-radius: 0.35rem; background: rgba(var(--bs-secondary-bg-rgb), 0.45); } .torrent-progress.is-complete > span { color: #fff; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); } .peer-progress { min-width: 86px; width: 96px; } .loading-center { justify-content: center; min-height: 80px; } .loading-cell { padding: 0 !important; } .mobile-list .loading-center { min-height: 160px; } .torrent-warning td { background: rgba(245, 158, 11, 0.075) !important; } .torrent-warning:hover td { background: rgba(245, 158, 11, 0.11) !important; } .torrent-warning.selected td { background: color-mix( in srgb, var(--bs-primary-bg-subtle) 82%, rgba(245, 158, 11, 0.16) ) !important; } .mobile-card.torrent-warning { background: rgba(245, 158, 11, 0.075); } .mobile-card.torrent-warning.selected { background: color-mix( in srgb, var(--bs-primary-bg-subtle) 82%, rgba(245, 158, 11, 0.16) ); } .torrent-warning-icon { color: var(--bs-warning); margin-right: 0.2rem; } .mobile-filter-bar { display: none; grid-row: 1; grid-column: 1; align-self: start; position: sticky; top: 0; z-index: 12; padding: 0.45rem 0.55rem; border-bottom: 1px solid var(--bs-border-color); background: rgba(var(--bs-body-bg-rgb), 0.96); } .mobile-filter-actions, .mobile-filter-select-row { display: flex; align-items: center; gap: 0.35rem; } .mobile-filter-actions { margin-bottom: 0.4rem; } .mobile-filter-actions span { color: var(--bs-secondary-color); font-size: 0.78rem; white-space: nowrap; } .mobile-filter-select-row label { color: var(--bs-secondary-color); font-size: 0.78rem; white-space: nowrap; } .mobile-filter-select-row select { min-width: 0; flex: 1 1 auto; } body.mobile-mode .mobile-filter-bar { display: block !important; } @media (max-width: 900px) { #mobileFilterBar { display: block !important; } #mobileList { padding-top: 5.2rem !important; } .topbar .badge { width: 0.72rem; height: 0.72rem; min-width: 0.72rem; padding: 0 !important; border-radius: 999px; overflow: hidden; color: transparent !important; text-indent: -999px; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.22); } .topbar .badge .spinner-border { display: none; } } .rt-config-grid { display: grid; gap: 0.6rem; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); } .rt-config-group { grid-column: 1 / -1; padding: 0.45rem 0.2rem 0.1rem; border-bottom: 1px solid var(--bs-border-color); color: var(--bs-primary-text-emphasis); font-weight: 800; } .rt-config-note { margin-bottom: 0.75rem; } .rt-config-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 0.75rem; } .rt-config-row { display: grid; grid-template-columns: 1fr minmax(120px, 190px); align-items: center; gap: 0.6rem; padding: 0.6rem; border: 1px solid var(--bs-border-color); border-radius: 0.7rem; background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .rt-config-switch { justify-self: end; margin: 0; } .rt-config-switch .form-check-input { margin-top: 0; } .rt-config-switch .form-check-label { min-width: 2rem; color: var(--bs-secondary-color); font-size: 0.78rem; font-weight: 700; } .rt-config-row b { font-size: 0.88rem; } .rt-config-row small { display: block; overflow-wrap: anywhere; color: var(--bs-secondary-color); font-size: 0.72rem; } .rt-config-row.disabled { opacity: 0.58; } .rt-config-row.changed, .rt-config-row.changed-live { border-color: var(--bs-danger); box-shadow: 0 0 0 0.12rem rgba(220, 53, 69, 0.2); } .rt-config-value-note { margin-top: 0.15rem; } .rt-config-output { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.82rem; } .tracker-toolbar, .tracker-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 0.45rem; } .tracker-toolbar { justify-content: space-between; margin-bottom: 0.55rem; } .tracker-url { min-width: 240px; max-width: 520px; } .tracker-message { max-width: 360px; white-space: normal; word-break: break-word; } .tracker-url-text { word-break: break-all; } .tool-note { color: var(--bs-secondary-color); font-size: 0.82rem; } .cleanup-grid, .diag-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.6rem; } .cleanup-card, .diag-card { padding: 0.65rem; border: 1px solid var(--bs-border-color); border-radius: 0.7rem; background: rgba(var(--bs-secondary-bg-rgb), 0.35); } .cleanup-card b, .diag-card b { display: block; margin-bottom: 0.2rem; color: var(--bs-secondary-color); font-size: 0.78rem; } .cleanup-card span, .diag-card span { font-weight: 700; } .cleanup-card small { display: block; margin-top: 0.2rem; overflow-wrap: anywhere; color: var(--bs-secondary-color); } .cleanup-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; } .diag-error { border-color: rgba(var(--bs-danger-rgb), 0.45); background: rgba(var(--bs-danger-rgb), 0.08); } .port-status { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.12rem 0.4rem; border-radius: 0.45rem; } .port-ok { background: rgba(34, 197, 94, 0.14); color: var(--bs-success); } .port-bad { background: rgba(239, 68, 68, 0.14); color: var(--bs-danger); } .port-secondary { background: rgba(148, 163, 184, 0.12); color: var(--bs-secondary-color); } .limit-slider-panel { padding: 0.65rem; border: 1px solid var(--bs-border-color); border-radius: 0.7rem; background: rgba(var(--bs-secondary-bg-rgb), 0.32); } .limit-slider-row + .limit-slider-row { margin-top: 0.65rem; } .limit-slider-row .form-label { display: flex; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.25rem; } @media (max-width: 640px) { #mobileToggle { display: none !important; } .tracker-url { min-width: 160px; max-width: 230px; } .tracker-message { max-width: 220px; } } .text-compact { display: inline-block; max-width: 32rem; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; white-space: nowrap; } .torrent-operating td { background: rgba(13, 202, 240, 0.085) !important; } .torrent-operating:hover td { background: rgba(13, 202, 240, 0.13) !important; } .torrent-operating.selected td { background: color-mix( in srgb, var(--bs-primary-bg-subtle) 78%, rgba(13, 202, 240, 0.18) ) !important; } .mobile-card.torrent-operating { background: rgba(13, 202, 240, 0.085); border-color: rgba(13, 202, 240, 0.45); } .mobile-card.torrent-operating.selected { background: color-mix( in srgb, var(--bs-primary-bg-subtle) 78%, rgba(13, 202, 240, 0.18) ); } .operation-status-badge { color: #062c33; } .mobile-progress { margin-top: 0.45rem; } .mobile-progress .torrent-progress { width: 100%; min-width: 0; } .preferences-sections { display: grid; gap: 1rem; } .preference-section { border-left: 0.25rem solid var(--bs-primary); } .empty-state { display: inline-flex; flex-direction: column; align-items: center; gap: 0.45rem; max-width: 34rem; white-space: normal; } .empty-state b { color: var(--bs-body-color); font-size: 0.95rem; } .empty-state span { color: var(--bs-secondary-color); } .footer-pref-hidden { display: none !important; } .footer-preferences { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.5rem; } .footer-pref-card { display: flex; align-items: center; gap: 0.55rem; min-width: 0; margin: 0; padding: 0.6rem 0.7rem; border: 1px solid var(--bs-border-color); border-radius: 0.75rem; background: rgba(var(--bs-secondary-bg-rgb), 0.45); cursor: pointer; user-select: none; transition: background 0.15s, border-color 0.15s; } .footer-pref-card:hover, .footer-pref-card.active { background: var(--bs-primary-bg-subtle); } .footer-pref-card:hover { border-color: var(--bs-primary); } .footer-pref-card.active { border-color: rgba(var(--bs-primary-rgb), 0.55); } .footer-pref-card .form-check-input { flex: 0 0 auto; margin: 0; } .footer-pref-card .form-check-label { min-width: 0; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #statusClock, #statusSockets { white-space: nowrap; } .torrent-stats-toolbar { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; } .torrent-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.75rem; } .torrent-stats-card { display: flex; flex-direction: column; gap: 0.25rem; min-width: 0; padding: 0.75rem; border: 1px solid var(--bs-border-color); border-radius: 0.85rem; background: rgba(var(--bs-secondary-bg-rgb), 0.45); } .torrent-stats-card b { color: var(--bs-secondary-color); font-size: 0.75rem; font-weight: 700; text-transform: uppercase; } .torrent-stats-card span { font-size: 1.05rem; font-weight: 700; } .torrent-stats-card small { color: var(--bs-secondary-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .peer-ip { display: inline-flex; align-items: center; gap: 0.35rem; white-space: nowrap; } .peer-ip-link { color: var(--bs-secondary-color); font-size: 0.75rem; text-decoration: none; } .peer-ip-link:hover { color: var(--bs-primary); } .auth-page { display: grid; min-height: 100vh; place-items: center; padding: 1rem; background: radial-gradient( circle at 50% 35%, rgba(var(--bs-secondary-bg-rgb), 0.98), var(--bs-body-bg) 68% ); color: var(--bs-body-color); } .auth-card { width: min(92vw, 430px); } .auth-lock { display: inline-grid; width: 3rem; height: 3rem; margin: 1.35rem 0 1rem; place-items: center; border: 1px solid var(--bs-border-color); border-radius: 999px; background: rgba(var(--bs-tertiary-bg-rgb), 0.72); color: var(--bs-primary); font-size: 1.15rem; } .auth-alert { margin: 1rem 0 0; padding: 0.5rem 0.75rem; text-align: left; } .auth-form { margin-top: 1.2rem; text-align: left; } .auth-form .form-label { margin-bottom: 0.35rem; font-size: 0.82rem; font-weight: 700; color: var(--bs-secondary-color); } .auth-form .form-control { margin-bottom: 0.85rem; } .auth-form .btn { margin-top: 0.35rem; } .user-form-grid { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(160px, 1fr) 120px 150px 110px auto auto; gap: 0.55rem; align-items: center; } .smart-panel { container-type: inline-size; } .smart-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--bs-border-color); } .smart-header-actions { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; justify-content: flex-end; } .smart-settings-list { display: grid; gap: 0.65rem; margin-top: 0.85rem; } .smart-setting-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; min-height: 52px; padding: 0.6rem 0.7rem; border: 1px solid var(--bs-border-color); border-radius: 0.65rem; background: rgba(var(--bs-secondary-bg-rgb), 0.28); } .smart-toggle-row .form-check { display: flex; align-items: center; min-height: 0; margin: 0; padding-left: 2.25rem; } .smart-toggle-row .form-check-input { margin-top: 0; } .smart-setting-row .form-check-label, .smart-input-field span { font-weight: 700; } .smart-input-grid { display: grid; grid-template-columns: repeat(4, minmax(120px, 1fr)); gap: 0.65rem; } .smart-input-field { display: grid; gap: 0.35rem; min-width: 0; padding: 0.6rem 0.7rem; border: 1px solid var(--bs-border-color); border-radius: 0.65rem; background: rgba(var(--bs-body-bg-rgb), 0.48); } .smart-input-field small { color: var(--bs-secondary-color); line-height: 1.2; } .smart-input-field .form-control { width: 100%; } .smart-actions { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; padding: 0.7rem; border: 1px solid var(--bs-border-color); border-radius: 0.65rem; background: rgba(var(--bs-secondary-bg-rgb), 0.24); } @media (max-width: 992px) { .user-form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .smart-input-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 576px) { .user-form-grid, .smart-input-grid { grid-template-columns: 1fr; } .smart-header, .smart-setting-row { align-items: stretch; flex-direction: column; } .smart-header-actions { justify-content: stretch; } .smart-header-actions .btn { flex: 1 1 auto; } .smart-toggle-row .form-check { padding-left: 0; } } /* Notatka: style About i stron błędów są zgrupowane, bez duplikowania istniejących klas. */ .about-modal-content { overflow: hidden; } .about-nav-btn { opacity: 0.82; } .about-nav-btn:hover, .about-nav-btn:focus-visible { opacity: 1; } .about-hero { display: flex; align-items: center; gap: 0.85rem; margin-bottom: 1rem; padding: 0.9rem; border: 1px solid var(--bs-border-color); border-radius: 0.85rem; background: rgba(var(--bs-secondary-bg-rgb), 0.38); } .about-logo { display: inline-grid; width: 2.8rem; height: 2.8rem; flex: 0 0 auto; place-items: center; border-radius: 0.8rem; background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); font-size: 1.25rem; } .about-hero h6, .about-hero p { margin: 0; } .about-hero h6 { font-weight: 800; } .about-hero p { color: var(--bs-secondary-color); } .about-list { display: grid; gap: 0.55rem; margin: 0; } .about-list div { display: grid; grid-template-columns: 7rem minmax(0, 1fr); gap: 0.75rem; padding: 0.55rem 0; border-bottom: 1px solid var(--bs-border-color); } .about-list div:last-child { border-bottom: 0; } .about-list dt { color: var(--bs-secondary-color); font-weight: 700; } .about-list dd { margin: 0; } .error-page { display: grid; min-height: 100vh; place-items: center; padding: 1rem; background: radial-gradient( circle at 50% 35%, rgba(var(--bs-secondary-bg-rgb), 0.98), var(--bs-body-bg) 68% ); color: var(--bs-body-color); } .error-card { width: min(92vw, 460px); padding: 2rem; border: 1px solid var(--bs-border-color); border-radius: 18px; background: rgba(var(--bs-secondary-bg-rgb), 0.9); box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48); text-align: center; } .error-brand { font-size: 1.2rem; font-weight: 800; } .error-icon { display: inline-grid; width: 4rem; height: 4rem; margin: 1.4rem 0 1rem; place-items: center; border: 1px solid var(--bs-border-color); border-radius: 1rem; background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); font-size: 1.55rem; } .error-code { margin: 0; color: var(--bs-secondary-color); font-size: 0.78rem; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; } .error-card h1 { margin: 0.25rem 0 0.55rem; font-size: 1.45rem; font-weight: 800; } .error-card p:not(.error-code) { margin: 0; color: var(--bs-secondary-color); } .error-actions { display: flex; justify-content: center; gap: 0.55rem; flex-wrap: wrap; margin-top: 1.35rem; } @media (max-width: 576px) { .about-list div { grid-template-columns: 1fr; gap: 0.15rem; } .error-actions .btn { width: 100%; } }