:root { --bg-void: #04060a; --bg-deep: #070b12; --bg-panel: #0b1019; --bg-panel-2: #0f1622; --bg-elevated: #121a28; --border: rgba(56, 189, 248, 0.14); --border-strong: rgba(56, 189, 248, 0.32); --border-dim: rgba(148, 163, 184, 0.12); --text: #e2e8f0; --text-bright: #f8fafc; --text-muted: #94a3b8; --text-dim: #64748b; --accent: #22d3ee; --accent-2: #38bdf8; --accent-dim: rgba(34, 211, 238, 0.12); --accent-hot: #f59e0b; --ok: #34d399; --ok-bg: rgba(52, 211, 153, 0.12); --warn: #fbbf24; --danger: #f43f5e; --danger-bg: rgba(244, 63, 94, 0.14); --font-ui: var(--font-outfit), system-ui, sans-serif; --font-mono: var(--font-jetbrains), ui-monospace, monospace; --radius: 10px; --shadow-panel: 0 0 0 1px var(--border), 0 18px 50px rgba(0, 0, 0, 0.45); --safe-top: env(safe-area-inset-top, 0px); --safe-bottom: env(safe-area-inset-bottom, 0px); --safe-left: env(safe-area-inset-left, 0px); --safe-right: env(safe-area-inset-right, 0px); --bottomnav-h: 0px; } * { box-sizing: border-box; margin: 0; padding: 0; } html { color-scheme: dark; } body { font-family: var(--font-ui); background: var(--bg-void); color: var(--text); min-height: 100vh; min-height: 100dvh; line-height: 1.45; -webkit-font-smoothing: antialiased; position: relative; padding-bottom: var(--bottomnav-h); overflow-x: hidden; -webkit-tap-highlight-color: transparent; touch-action: manipulation; } /* Atmosphere: grid + radial vignette */ body::before { content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; background: radial-gradient(ellipse 80% 50% at 50% -10%, rgba(34, 211, 238, 0.09), transparent 55%), radial-gradient(ellipse 40% 30% at 90% 80%, rgba(245, 158, 11, 0.04), transparent 50%), linear-gradient(rgba(34, 211, 238, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(34, 211, 238, 0.03) 1px, transparent 1px); background-size: auto, auto, 48px 48px, 48px 48px; mask-image: radial-gradient(ellipse 90% 70% at 50% 30%, black, transparent 85%); } body::after { content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; opacity: 0.035; background: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(0, 0, 0, 0.35) 2px, rgba(0, 0, 0, 0.35) 4px ); } body > * { position: relative; z-index: 1; } a { color: var(--accent); text-decoration: none; transition: color 0.15s ease; } a:hover { color: var(--accent-2); } .container { max-width: 1280px; margin: 0 auto; padding: 1.75rem 1.5rem calc(3rem + var(--bottomnav-h)); padding-left: max(1.5rem, var(--safe-left)); padding-right: max(1.5rem, var(--safe-right)); } .page-header { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; margin-bottom: 1.75rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-dim); } .page-header h1, .container > h1 { font-size: 1.65rem; font-weight: 700; letter-spacing: -0.02em; color: var(--text-bright); margin-bottom: 0; } .container > h1 { margin-bottom: 1.75rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-dim); } .page-kicker { font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); margin-bottom: 0.35rem; } .muted { color: var(--text-muted); font-size: 0.875rem; } .card { background: linear-gradient(145deg, rgba(34, 211, 238, 0.04), transparent 40%), var(--bg-panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem 1.35rem; margin-bottom: 1rem; box-shadow: var(--shadow-panel); position: relative; overflow: hidden; } .card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.45), transparent); opacity: 0.7; } .card h2 { font-family: var(--font-mono); font-size: 0.68rem; font-weight: 500; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.14em; margin-bottom: 0.55rem; } .card .value { font-family: var(--font-mono); font-size: 1.85rem; font-weight: 700; color: var(--text-bright); letter-spacing: -0.03em; line-height: 1.1; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.9rem; margin-bottom: 1.5rem; } .grid .card .value { color: var(--accent); text-shadow: 0 0 24px rgba(34, 211, 238, 0.25); } /* ??? Nav ??? */ .topnav { position: sticky; top: 0; z-index: 50; display: flex; align-items: center; gap: 0.35rem; padding: 0.7rem 1.25rem; padding-top: max(0.7rem, var(--safe-top)); padding-left: max(1.25rem, var(--safe-left)); padding-right: max(1.25rem, var(--safe-right)); background: rgba(7, 11, 18, 0.82); backdrop-filter: blur(14px); border-bottom: 1px solid var(--border); } .topnav::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--accent), transparent); opacity: 0.35; } .topnav .brand { display: flex; align-items: center; gap: 0.65rem; margin-right: 1rem; font-weight: 700; font-size: 0.95rem; letter-spacing: 0.04em; color: var(--text-bright); text-decoration: none; min-width: 0; } .topnav .brand-mark { width: 28px; height: 28px; flex-shrink: 0; border: 1px solid var(--border-strong); border-radius: 6px; display: grid; place-items: center; font-family: var(--font-mono); font-size: 0.65rem; color: var(--accent); background: var(--accent-dim); box-shadow: inset 0 0 12px rgba(34, 211, 238, 0.15); } .topnav .brand-text { display: flex; flex-direction: column; line-height: 1.05; } .topnav .brand-text small { font-family: var(--font-mono); font-size: 0.58rem; font-weight: 500; letter-spacing: 0.2em; color: var(--text-dim); text-transform: uppercase; } .topnav-links { display: flex; align-items: center; gap: 0.15rem; flex-wrap: wrap; } .topnav-links a { color: var(--text-muted); font-size: 0.8rem; font-weight: 500; padding: 0.45rem 0.7rem; border-radius: 6px; border: 1px solid transparent; transition: color 0.15s, background 0.15s, border-color 0.15s; } .topnav-links a:hover { color: var(--text-bright); background: rgba(255, 255, 255, 0.03); text-decoration: none; } .topnav-links a.active { color: var(--accent); background: var(--accent-dim); border-color: var(--border); text-decoration: none; } .topnav .btn-logout { margin-left: auto; background: transparent; color: var(--text-muted); border: 1px solid var(--border-dim); padding: 0.4rem 0.85rem; border-radius: 6px; font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.06em; text-transform: uppercase; } .topnav .btn-logout:hover { color: var(--text-bright); border-color: var(--border-strong); background: rgba(255, 255, 255, 0.03); } .nav-burger { display: none; margin-left: auto; width: 42px; height: 42px; padding: 0; border-radius: 8px; border: 1px solid var(--border-dim); background: transparent; flex-direction: column; align-items: center; justify-content: center; gap: 5px; } .nav-burger span { display: block; width: 18px; height: 2px; background: var(--text-bright); border-radius: 1px; transition: transform 0.2s, opacity 0.2s; } .nav-burger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .nav-burger.open span:nth-child(2) { opacity: 0; } .nav-burger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } .nav-drawer-backdrop { display: none; } .nav-drawer { display: none; } .bottomnav { display: none; } /* ??? Tables ??? */ .table-wrap, .card > table { width: 100%; } table { width: 100%; border-collapse: collapse; } th, td { text-align: left; padding: 0.8rem 0.9rem; border-bottom: 1px solid var(--border-dim); vertical-align: middle; } th { font-family: var(--font-mono); color: var(--text-dim); font-size: 0.65rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.12em; background: rgba(0, 0, 0, 0.2); } tbody tr { transition: background 0.12s ease; } tbody tr:hover { background: rgba(34, 211, 238, 0.04); } td { font-size: 0.875rem; } /* ??? Status ??? */ .status { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.2rem 0.55rem; border-radius: 4px; font-family: var(--font-mono); font-size: 0.68rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; border: 1px solid transparent; } .status::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; box-shadow: 0 0 8px currentColor; } .status.online { background: var(--ok-bg); color: var(--ok); border-color: rgba(52, 211, 153, 0.25); } .status.offline { background: rgba(100, 116, 139, 0.15); color: var(--text-muted); border-color: rgba(100, 116, 139, 0.25); } .status.revoked { background: var(--danger-bg); color: #fda4af; border-color: rgba(244, 63, 94, 0.3); } /* ??? Buttons ??? */ button, .btn { background: linear-gradient(180deg, rgba(34, 211, 238, 0.22), rgba(34, 211, 238, 0.08)); color: var(--text-bright); border: 1px solid var(--border-strong); padding: 0.5rem 1rem; border-radius: 7px; cursor: pointer; font-family: var(--font-ui); font-size: 0.82rem; font-weight: 600; letter-spacing: 0.01em; transition: border-color 0.15s, background 0.15s, transform 0.1s; } button:hover, .btn:hover { background: linear-gradient(180deg, rgba(34, 211, 238, 0.32), rgba(34, 211, 238, 0.12)); border-color: var(--accent); } button:active, .btn:active { transform: translateY(1px); } button:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } button.danger { background: linear-gradient(180deg, rgba(244, 63, 94, 0.28), rgba(244, 63, 94, 0.1)); border-color: rgba(244, 63, 94, 0.45); color: #fecdd3; } button.danger:hover { background: linear-gradient(180deg, rgba(244, 63, 94, 0.4), rgba(244, 63, 94, 0.16)); border-color: var(--danger); } button.ghost { background: transparent; border-color: var(--border-dim); color: var(--text-muted); } /* ??? Forms ??? */ input, select, textarea { background: var(--bg-deep); border: 1px solid var(--border-dim); color: var(--text-bright); padding: 0.55rem 0.75rem; border-radius: 7px; width: 100%; margin-bottom: 0.75rem; font-family: var(--font-ui); font-size: 0.9rem; transition: border-color 0.15s, box-shadow 0.15s; } input:focus, select:focus, textarea:focus { outline: none; border-color: var(--border-strong); box-shadow: 0 0 0 3px var(--accent-dim); } input::placeholder { color: var(--text-dim); } .form-group { margin-bottom: 1rem; } .form-group label { display: block; font-family: var(--font-mono); font-size: 0.68rem; font-weight: 500; color: var(--text-muted); margin-bottom: 0.35rem; letter-spacing: 0.08em; text-transform: uppercase; } /* ??? Login ??? */ .login-container { display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 1.5rem; } .login-box { background: linear-gradient(160deg, rgba(34, 211, 238, 0.07), transparent 45%), var(--bg-panel); border: 1px solid var(--border); border-radius: 14px; padding: 2rem 2rem 1.75rem; width: 100%; max-width: 420px; box-shadow: var(--shadow-panel), 0 0 80px rgba(34, 211, 238, 0.06); position: relative; } .login-box::before { content: ""; position: absolute; inset: -1px; border-radius: 14px; padding: 1px; background: linear-gradient(135deg, rgba(34, 211, 238, 0.45), transparent 40%, rgba(245, 158, 11, 0.2)); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; } .login-box .login-brand { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1.5rem; } .login-box .login-brand .mark { width: 40px; height: 40px; border: 1px solid var(--border-strong); border-radius: 8px; display: grid; place-items: center; font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700; color: var(--accent); background: var(--accent-dim); } .login-box h1 { margin-bottom: 0.15rem; font-size: 1.45rem; letter-spacing: -0.02em; } .login-box .login-sub { font-family: var(--font-mono); font-size: 0.7rem; color: var(--text-dim); letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 1.5rem; } .error { color: #fda4af; font-size: 0.85rem; margin-bottom: 1rem; padding: 0.65rem 0.75rem; background: var(--danger-bg); border: 1px solid rgba(244, 63, 94, 0.3); border-radius: 7px; } .token-display { background: var(--bg-deep); border: 1px solid var(--border); padding: 1rem; border-radius: 8px; font-family: var(--font-mono); font-size: 0.78rem; word-break: break-all; margin: 1rem 0; color: var(--accent); line-height: 1.5; } code { font-family: var(--font-mono); font-size: 0.85em; color: var(--accent-2); background: var(--accent-dim); padding: 0.1em 0.35em; border-radius: 4px; } pre.token-display { white-space: pre-wrap; } /* Soften common inline hard-coded greys from older page markup */ .card p[style*="#a1a1aa"], .card p[style*="#71717a"], .container p[style*="#a1a1aa"], .container p[style*="#71717a"] { color: var(--text-muted) !important; } .card h2[style*="#fafafa"], .card h3[style*="#e4e4e7"] { color: var(--text-bright) !important; font-family: var(--font-ui) !important; letter-spacing: -0.01em !important; } .progress-track { height: 6px; border-radius: 3px; background: rgba(148, 163, 184, 0.15); overflow: hidden; border: 1px solid var(--border-dim); } .progress-fill { height: 100%; background: linear-gradient(90deg, var(--accent), #67e8f9); border-radius: 3px; transition: width 0.4s ease; box-shadow: 0 0 10px rgba(34, 211, 238, 0.35); } /* ??? Layout sections & mobile cards ??? */ .stack-section { margin-bottom: 1.75rem; } .section-head { margin-bottom: 0.85rem; } .section-head.row { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; flex-wrap: wrap; } .section-title { font-size: 1.05rem; font-weight: 700; color: var(--text-bright); letter-spacing: -0.01em; margin: 0 0 0.25rem; } .card-subtitle { font-size: 0.92rem; font-weight: 600; color: var(--text-bright); margin: 0 0 0.85rem; text-transform: none; letter-spacing: 0; font-family: var(--font-ui); } .page-lead { margin: -0.5rem 0 1.25rem; font-size: 0.875rem; } .tiny { font-size: 0.75rem; } .mono { font-family: var(--font-mono); } .viewer-name { color: var(--accent); } .live-badge { font-family: var(--font-mono); font-size: 0.75rem; color: var(--accent); border: 1px solid var(--border); background: var(--accent-dim); padding: 0.35rem 0.7rem; border-radius: 6px; } .desktop-table { display: block; } .list-cards { display: none; } .list-card { background: var(--bg-panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; display: flex; flex-direction: column; gap: 0.65rem; } .list-card.selected, tr.row-selected { border-color: var(--border-strong); background: rgba(34, 211, 238, 0.05); } .list-card-top { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; } .list-card-title { font-weight: 600; color: var(--text-bright); font-size: 0.92rem; line-height: 1.35; flex: 1; min-width: 0; word-break: break-word; } .list-card-meta { display: flex; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; color: var(--text-muted); font-size: 0.8rem; } .stream-title { font-weight: 600; color: var(--text-bright); font-size: 0.95rem; line-height: 1.3; } .action-row { display: flex; flex-wrap: wrap; gap: 0.5rem; } .action-row button { flex: 1 1 auto; } .inline-form { display: flex; flex-wrap: wrap; gap: 0.65rem; align-items: stretch; } .inline-form input, .inline-form select { flex: 1 1 160px; margin-bottom: 0; min-height: 44px; background: var(--bg-deep); border: 1px solid var(--border-dim); color: var(--text-bright); border-radius: 7px; padding: 0.55rem 0.75rem; font-family: var(--font-ui); font-size: 0.9rem; } .form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.85rem; margin-bottom: 1rem; } .form-grid > label { display: flex; flex-direction: column; gap: 0.35rem; font-size: 0.85rem; color: var(--text-muted); } .form-grid > label input { margin-bottom: 0; min-height: 44px; background: var(--bg-deep); border: 1px solid var(--border-dim); color: var(--text-bright); border-radius: 7px; padding: 0.55rem 0.75rem; font-family: var(--font-ui); font-size: 0.9rem; } .form-span { grid-column: 1 / -1; } .check-row { display: flex; flex-wrap: wrap; gap: 0.85rem 1.25rem; margin: 0 0 1rem; padding: 0.85rem 1rem; background: var(--bg-deep); border: 1px solid var(--border-dim); border-radius: 8px; } .check-label { display: flex; align-items: center; gap: 0.45rem; font-size: 0.875rem; color: var(--text); cursor: pointer; } .path-cell { font-size: 0.8rem; max-width: 360px; } .path-line { color: var(--text-muted); margin-bottom: 0.2rem; word-break: break-all; } .path-block { display: flex; flex-direction: column; gap: 0.35rem; font-size: 0.78rem; } .path-block code { display: block; margin-top: 0.15rem; word-break: break-all; } .warn-hint { color: var(--accent-hot); font-size: 0.75rem; margin-top: 0.25rem; } .btn-cyan { background: linear-gradient(180deg, rgba(14, 116, 144, 0.55), rgba(14, 116, 144, 0.25)) !important; border-color: rgba(34, 211, 238, 0.4) !important; } .btn-ok { background: linear-gradient(180deg, rgba(22, 101, 52, 0.55), rgba(22, 101, 52, 0.25)) !important; border-color: rgba(52, 211, 153, 0.4) !important; } .btn-warn { background: linear-gradient(180deg, rgba(180, 83, 9, 0.5), rgba(180, 83, 9, 0.2)) !important; border-color: rgba(251, 191, 36, 0.35) !important; } .iptv-card { border-color: rgba(34, 211, 238, 0.28); } .tools-card { display: flex; flex-direction: column; gap: 0; } .tool-block { padding: 1rem 0; border-bottom: 1px solid var(--border-dim); } .tool-block:first-child { padding-top: 0; } .tool-block:last-child { padding-bottom: 0; border-bottom: none; } .tool-block .muted { margin: 0.35rem 0 0.75rem; } .tool-block .tiny { margin-top: 0.65rem; } @media (max-width: 900px) { :root { --bottomnav-h: calc(64px + var(--safe-bottom)); } .topnav-links-desktop, .topnav-logout-desktop { display: none !important; } .nav-burger { display: flex; } .topnav .brand-text small { display: none; } .nav-drawer-backdrop { display: block; position: fixed; inset: 0; z-index: 60; background: rgba(0, 0, 0, 0.55); backdrop-filter: blur(2px); } .nav-drawer { display: flex; flex-direction: column; position: fixed; top: 0; right: 0; z-index: 70; width: min(320px, 88vw); height: 100%; height: 100dvh; padding: max(1rem, var(--safe-top)) max(1rem, var(--safe-right)) max(1rem, var(--safe-bottom)) 1rem; background: var(--bg-panel); border-left: 1px solid var(--border); box-shadow: -20px 0 60px rgba(0, 0, 0, 0.45); transform: translateX(105%); transition: transform 0.22s ease; gap: 1rem; } .nav-drawer.open { transform: translateX(0); } .nav-drawer-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .nav-drawer-links { display: flex; flex-direction: column; gap: 0.35rem; flex: 1; overflow-y: auto; } .nav-drawer-links a { color: var(--text-muted); padding: 0.85rem 1rem; border-radius: 8px; border: 1px solid transparent; font-weight: 600; font-size: 0.95rem; } .nav-drawer-links a.active { color: var(--accent); background: var(--accent-dim); border-color: var(--border); text-decoration: none; } .nav-drawer-logout { width: 100%; } .bottomnav { display: grid; grid-template-columns: repeat(6, 1fr); position: fixed; left: 0; right: 0; bottom: 0; z-index: 55; height: var(--bottomnav-h); padding: 0.35rem 0.25rem max(0.35rem, var(--safe-bottom)); padding-left: max(0.25rem, var(--safe-left)); padding-right: max(0.25rem, var(--safe-right)); background: rgba(7, 11, 18, 0.92); backdrop-filter: blur(16px); border-top: 1px solid var(--border); } .bottomnav a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.2rem; color: var(--text-dim); font-size: 0.62rem; font-weight: 600; letter-spacing: 0.02em; text-decoration: none; border-radius: 8px; min-height: 48px; } .bottomnav a .bottomnav-dot { width: 5px; height: 5px; border-radius: 50%; background: transparent; } .bottomnav a.active { color: var(--accent); background: var(--accent-dim); text-decoration: none; } .bottomnav a.active .bottomnav-dot { background: var(--accent); box-shadow: 0 0 8px var(--accent); } .container { padding: 1.1rem 0.9rem calc(1.25rem + var(--bottomnav-h)); padding-left: max(0.9rem, var(--safe-left)); padding-right: max(0.9rem, var(--safe-right)); } .page-header { flex-direction: column; align-items: stretch; gap: 0.85rem; } .page-header h1, .container > h1 { font-size: 1.35rem; } .page-header form, .page-header > button { width: 100%; } .page-header form { flex-wrap: wrap; } .page-header form input { flex: 1; min-width: 0; width: auto !important; } .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.65rem; } .grid .card .value { font-size: 1.35rem; } .card { padding: 1rem; overflow-x: hidden; } th, td { padding: 0.65rem 0.7rem; font-size: 0.82rem; } button, .btn { min-height: 42px; } input, select, textarea { font-size: 16px; /* voorkomt iOS zoom bij focus */ min-height: 44px; } .login-container { padding: max(1rem, var(--safe-top)) max(1rem, var(--safe-right)) max(1rem, var(--safe-bottom)) max(1rem, var(--safe-left)); align-items: flex-start; padding-top: max(2.5rem, calc(var(--safe-top) + 1.5rem)); } .login-box { padding: 1.5rem 1.25rem; } .token-display { font-size: 0.72rem; } .desktop-table { display: none !important; } .list-cards { display: flex; flex-direction: column; gap: 0.75rem; } .card > .desktop-table { display: none !important; } /* Geen horizontale tabel-scroll meer op mobiel */ .card > table, table { min-width: 0; } .section-head.row { flex-direction: column; } .inline-form button { width: 100%; } .page-lead { margin-top: 0; } } @media (max-width: 480px) { .grid { grid-template-columns: 1fr; } .bottomnav a { font-size: 0.58rem; } .topnav .brand-text { font-size: 0.85rem; } } /* Prefer reduced motion */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } } .badge { display: inline-flex; align-items: center; font-family: var(--font-mono); font-size: 0.68rem; letter-spacing: 0.04em; text-transform: uppercase; padding: 0.2rem 0.45rem; border-radius: 4px; border: 1px solid var(--border-dim); color: var(--text-muted); background: var(--bg-elevated); } .badge-ok { color: var(--ok); background: var(--ok-bg); border-color: rgba(52, 211, 153, 0.35); } .badge-warn { color: var(--warn); background: rgba(251, 191, 36, 0.12); border-color: rgba(251, 191, 36, 0.3); } .badge-danger { color: var(--danger); background: var(--danger-bg); border-color: rgba(244, 63, 94, 0.35); } .ok-text { color: var(--ok); } .danger-text { color: var(--danger); } .modal-backdrop { position: fixed; inset: 0; z-index: 80; background: rgba(0, 0, 0, 0.65); display: flex; align-items: flex-end; justify-content: center; padding: 1rem; } @media (min-width: 720px) { .modal-backdrop { align-items: center; } } .modal-panel { width: min(560px, 100%); max-height: 90vh; overflow: auto; background: var(--bg-panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem; box-shadow: var(--shadow-panel); } .match-list { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.75rem; max-height: 40vh; overflow: auto; } .match-item { display: flex; gap: 0.75rem; align-items: center; text-align: left; background: var(--bg-elevated); border: 1px solid var(--border-dim); border-radius: 8px; padding: 0.5rem 0.75rem; color: inherit; cursor: pointer; width: 100%; } .match-item.selected { border-color: var(--accent); background: var(--accent-dim); } .match-item span { display: flex; flex-direction: column; gap: 0.15rem; } .match-item img { border-radius: 4px; object-fit: cover; } /* ??? Settings tabs ??? */ .settings-tabs { display: flex; gap: 0.4rem; overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 0 0 1.25rem; padding-bottom: 0.15rem; scrollbar-width: none; } .settings-tabs::-webkit-scrollbar { display: none; } .settings-tabs button { flex: 0 0 auto; min-height: 40px; padding: 0.45rem 0.85rem; border-radius: 8px; background: var(--bg-elevated); border: 1px solid var(--border-dim); color: var(--text-muted); font-weight: 600; white-space: nowrap; } .settings-tabs button.active { color: var(--text-bright); border-color: var(--border-strong); background: var(--accent-dim); } .settings-tab-short { display: none; } @media (max-width: 560px) { .settings-tab-full { display: none; } .settings-tab-short { display: inline; } } /* ??? Downloads (mobile-first) ??? */ .downloads-banner p { margin: 0; font-size: 0.9rem; } .downloads-target-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.5rem; margin-bottom: 0.85rem; } .downloads-target { display: flex; flex-direction: column; align-items: flex-start; gap: 0.15rem; text-align: left; padding: 0.65rem 0.75rem; border-radius: 10px; border: 1px solid var(--border-dim); background: var(--bg-elevated); color: var(--text); cursor: pointer; min-height: 52px; } .downloads-target strong { font-size: 0.9rem; } .downloads-target .muted { font-size: 0.72rem; } .downloads-target.on { border-color: var(--accent, #3b82f6); box-shadow: inset 0 0 0 1px var(--accent, #3b82f6); background: var(--bg); } .downloads-completed-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .downloads-job-actions { display: flex; flex-wrap: wrap; gap: 0.35rem; justify-content: flex-end; } .downloads-jobs-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 0.5rem 1.25rem; } .downloads-jobs-totals { display: flex; flex-wrap: wrap; gap: 0.35rem 1.25rem; font-size: 0.85rem; } .downloads-jobs-speed { color: var(--text-bright, var(--text)); font-variant-numeric: tabular-nums; } .downloads-target-select { min-height: 36px; font-size: 0.8rem; max-width: 9rem; } .downloads-mode-row { grid-template-columns: repeat(2, minmax(0, 1fr)); } .downloads-episode-list { list-style: none; margin: 0.5rem 0 0; padding: 0; display: grid; gap: 0.35rem; } .downloads-episode-list li { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; font-size: 0.8rem; padding: 0.35rem 0.5rem; border-radius: 6px; border: 1px solid var(--border-dim); background: var(--bg-elevated); } .downloads-progress-cell { min-width: 7.5rem; max-width: 10rem; } .downloads-progress-block { margin: 0.35rem 0 0.45rem; } .downloads-progress-meta { font-size: 0.8rem; font-variant-numeric: tabular-nums; color: var(--text-bright, var(--text)); } .downloads-progress-bar { margin-top: 0.3rem; height: 4px; border-radius: 999px; background: var(--border-dim); overflow: hidden; } .downloads-progress-bar > span { display: block; height: 100%; border-radius: inherit; background: var(--accent, #3b82f6); transition: width 0.4s ease; } .downloads-toolbar { display: flex; flex-wrap: wrap; gap: 0.65rem; align-items: flex-end; } .downloads-toolbar-stack { flex-direction: column; align-items: stretch; margin: 0.75rem 0; } .downloads-toolbar-stack input, .downloads-toolbar-stack button { width: 100%; min-height: 44px; } .downloads-field { display: flex; flex-direction: column; gap: 0.3rem; flex: 1 1 140px; font-size: 0.8rem; color: var(--text-muted); } .downloads-field-grow { flex: 2 1 200px; } .downloads-field select, .downloads-field input { margin: 0; min-height: 44px; width: 100%; background: var(--bg-deep); border: 1px solid var(--border-dim); color: var(--text-bright); border-radius: 7px; padding: 0.55rem 0.75rem; font-family: var(--font-ui); font-size: 0.9rem; } .downloads-search-btn { flex: 0 0 auto; min-height: 44px; align-self: flex-end; } .downloads-source { word-break: break-word; font-size: 0.82rem; } .downloads-results .list-card-title { font-size: 0.88rem; } .downloads-modal-title { margin-bottom: 0.35rem; font-size: 1.2rem; } .downloads-subs { margin-top: 1rem; } .downloads-modal-actions { display: flex; flex-direction: column; gap: 0.55rem; margin-top: 1rem; } .downloads-modal-actions button { width: 100%; min-height: 44px; } @media (min-width: 720px) { .downloads-modal-actions { flex-direction: row; } .downloads-modal-actions button { width: auto; } } @media (max-width: 720px) { .downloads-target-row { grid-template-columns: 1fr; } .downloads-toolbar { flex-direction: column; align-items: stretch; } .downloads-field, .downloads-field-grow { flex: 1 1 auto; } .downloads-search-btn { width: 100%; align-self: stretch; } } @media (max-width: 900px) { .downloads-page .desktop-table { display: none !important; } .downloads-page .list-cards, .downloads-page .downloads-results { display: flex; flex-direction: column; gap: 0.75rem; } .modal-panel.downloads-modal { width: 100%; max-height: min(92vh, 920px); border-radius: 14px 14px 0 0; padding: 1rem 1rem calc(1rem + var(--safe-bottom)); } } /* ?? Public legal pages (privacy, etc.) ?? */ .legal-page { min-height: 100dvh; padding: 2rem 1rem 3rem; display: flex; justify-content: center; } .legal-card { width: 100%; max-width: 44rem; background: rgba(12, 16, 24, 0.92); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 16px; padding: 1.75rem 1.5rem 2rem; } .legal-card h1 { margin: 0.25rem 0 0.5rem; font-size: 1.75rem; letter-spacing: -0.02em; } .legal-card h2 { margin: 1.75rem 0 0.6rem; font-size: 1.05rem; color: #e4e4e7; } .legal-card p, .legal-card li { color: #a1a1aa; line-height: 1.65; font-size: 0.95rem; } .legal-card ul { margin: 0.5rem 0 0.75rem; padding-left: 1.25rem; } .legal-card a { color: #93c5fd; text-decoration: underline; text-underline-offset: 2px; } .legal-meta { margin-bottom: 1.25rem; } .legal-footer { margin-top: 2rem; padding-top: 1rem; border-top: 1px solid rgba(255, 255, 255, 0.06); } @media (min-width: 720px) { .legal-card { padding: 2.25rem 2.5rem 2.5rem; } } /* Install one-pager */ .install-lang { display: flex; gap: 0.5rem; justify-content: flex-end; margin-bottom: 0.5rem; } .install-lang button { background: transparent; border: 1px solid rgba(255, 255, 255, 0.12); color: #a1a1aa; border-radius: 8px; padding: 0.35rem 0.7rem; font-size: 0.8rem; cursor: pointer; } .install-lang button.active { color: #f4f4f5; border-color: rgba(147, 197, 253, 0.45); background: rgba(147, 197, 253, 0.08); } .install-lead { font-size: 1.05rem; color: #d4d4d8; line-height: 1.6; } .install-step-label { margin: 1.1rem 0 0.35rem; font-size: 0.85rem; color: #e4e4e7; font-weight: 600; } .install-code { margin: 0; padding: 0.9rem 1rem; background: rgba(0, 0, 0, 0.45); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 10px; overflow-x: auto; font-size: 0.8rem; line-height: 1.5; color: #e4e4e7; white-space: pre-wrap; } .install-tip { margin-top: 1.25rem; padding: 0.9rem 1rem; border-radius: 10px; border: 1px solid rgba(250, 204, 21, 0.25); background: rgba(250, 204, 21, 0.06); } .install-tip strong { color: #fde68a; font-size: 0.85rem; } .install-tip p { margin: 0.35rem 0 0; } .install-ol { margin: 0.5rem 0 0.75rem; padding-left: 1.25rem; } .install-ol li { color: #a1a1aa; line-height: 1.65; font-size: 0.95rem; margin-bottom: 0.4rem; }