diora-web/static/podcasts/podcast-ui.css

890 lines
39 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Copied from diora-android 6a0a362 2026-11-09: the podcast parts of web-native/static/native.css
(bottom sheet, podcasts) by tools/sync_podcast_ui.py. Do not edit here.
The web's own additions are in podcasts-web.css. */
/* ---- bottom sheet ---------------------------------------------------------------- */
/* Monospace stays the brand's (headings, tabs, numbers); reading text — titles, episode
lines, show notes, descriptions, hints — is the system's sans (no font download). */
:root {
--nui-sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Noto Sans', 'Helvetica Neue', Arial, sans-serif;
}
#nui-sheet {
position: fixed;
inset: 0;
z-index: 900;
}
.nui-backdrop {
position: absolute;
inset: 0;
background: var(--scrim, rgba(0, 0, 0, 0.6));
}
.nui-panel {
position: absolute;
left: 0;
right: 0;
bottom: 0;
max-height: 80vh;
overflow-y: auto;
background: var(--nui-panel);
border-top: 1px solid var(--border);
border-radius: 12px 12px 0 0;
padding: 8px 0 12px;
animation: nui-up 0.18s ease-out;
}
@keyframes nui-up {
from { transform: translateY(40px); opacity: 0; }
to { transform: none; opacity: 1; }
}
.nui-sheet-title {
padding: 10px 20px 8px;
font-size: 12px;
font-weight: 400;
color: var(--nui-muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.nui-row,
.nui-row-main {
display: flex;
align-items: center;
gap: 14px;
width: 100%;
min-height: 52px;
padding: 6px 20px;
background: none;
border: none;
color: var(--fg);
font: inherit;
font-size: 15px;
text-align: left;
cursor: pointer;
}
.nui-row:active,
.nui-row-main:active {
background: var(--hover, #1d1d1d);
}
.nui-row-icon {
width: 24px;
text-align: center;
flex-shrink: 0;
font-size: 18px;
}
.nui-row-text {
display: flex;
flex-direction: column;
min-width: 0;
}
.nui-row-hint {
font-family: var(--nui-sans);
font-size: 13px;
font-weight: 400;
letter-spacing: normal;
line-height: 1.35;
color: var(--nui-muted);
}
/* Red only where it's meant: the destructive choice in a confirmation. What is set is bright and bold. */
.nui-danger { color: var(--accent); }
.nui-active .nui-row-label { color: var(--fg, #fff); font-weight: 700; }
.nui-active .nui-row-hint { color: var(--fg, #fff); }
.nui-row-split {
padding: 0 16px 0 0;
}
.nui-row-split .nui-row-main {
flex: 1;
width: auto;
}
.nui-seg {
display: inline-flex;
border: 1px solid var(--border);
border-radius: 4px;
overflow: hidden;
}
.nui-seg button {
min-width: 44px;
min-height: 34px;
background: none;
border: none;
color: var(--nui-muted);
font: inherit;
}
.nui-seg button.nui-seg-on {
background: var(--fg);
color: var(--bg);
}
/* ---- podcasts (phones only: html.nui-podcasts, see native-podcast.js) ------------ */
html.nui-podcasts #tab-podcasts > :not(#nui-pod) { display: none !important; }
html.nui-pod-playing #nui-mini { display: none !important; }
/* One player for both: the podcast bar shows the radio too. */
html.nui-one-player #nui-mini { display: none !important; }
.nui-mini-radio .nui-pod-art,
.nui-radio-art { display: flex; align-items: center; justify-content: center; }
.nui-mini-radio .nui-pod-art:empty::after,
.nui-radio-art:empty::after { content: '◉'; color: var(--accent); font-size: 22px; }
.nui-radio-art:empty::after { font-size: 96px; }
.nui-mini-radio .nui-pod-art img,
.nui-radio-art img { object-fit: contain; background: #fff; }
.nui-radio-live { text-align: center; font-size: 13px; color: var(--nui-muted); letter-spacing: 0.04em; }
.nui-radio-live.on { color: var(--accent); font-weight: 700; }
.nui-radio-stations { align-self: center; }
#nui-pod-bar {
display: flex;
align-items: center;
gap: 2px;
margin: 0 -4px 8px 0;
}
#nui-pod-bar .native-brand { font-size: 22px; font-weight: 700; letter-spacing: 0.04em; }
.nui-pod-status { font-size: 12px; font-weight: 400; color: var(--nui-muted); }
.nui-pod-tabs {
display: flex;
margin: 0 0 8px;
border-bottom: 1px solid var(--border);
overflow-x: auto;
scrollbar-width: none;
}
.nui-pod-tab {
flex: 1 1 auto;
min-width: 0;
min-height: var(--nui-tap);
padding: 0 5px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 4px;
border: none;
border-bottom: 2px solid transparent;
background: none;
color: var(--nui-muted);
font: inherit;
font-size: 13px;
letter-spacing: 0;
white-space: nowrap;
}
.nui-pod-tab.active { color: var(--fg, #fff); font-weight: 700; border-bottom-color: var(--fg, #fff); }
.nui-pod-count {
min-width: 18px;
padding: 1px 5px;
border-radius: 9px;
background: var(--raised, #2a2a2a);
color: var(--fg, #ddd);
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0;
text-align: center;
font-variant-numeric: tabular-nums;
}
.nui-pod-count-queue { background: var(--accent); color: var(--on-accent, #fff); }
.nui-pod-summary { padding: 6px 2px 10px; font-size: 12px; color: var(--nui-muted); }
/* Where audiobook subscriptions went (they are in the library, see audiobooks.js). */
.nui-pod-hint { padding: 14px 2px; font-size: 13px; color: var(--nui-muted); font-family: var(--nui-sans); letter-spacing: normal; }
/* ---- gestures (native-gestures.js, native-podcast.js) ---- */
#nui-gesture-sign {
position: fixed; left: 50%; top: 42%; transform: translate(-50%, -50%);
z-index: 995; padding: 12px 20px; border-radius: 12px;
background: rgba(0, 0, 0, 0.78); color: #fff; font-size: 18px; font-weight: 700;
opacity: 0; pointer-events: none; transition: opacity 0.2s;
}
#nui-gesture-sign.nui-show { opacity: 1; }
#nui-pull {
position: fixed; left: 50%; top: 0; z-index: 995; width: 40px; height: 40px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
background: var(--panel, #111); border: 1px solid var(--border); color: var(--nui-muted); font-size: 20px;
transform: translate(-50%, -48px); opacity: 0; pointer-events: none; transition: opacity 0.15s;
}
#nui-pull.nui-show { opacity: 1; }
#nui-pull.nui-ready { color: var(--accent); border-color: var(--accent); }
.nui-pod-art-player { position: relative; }
.nui-pod-cover-skip {
position: absolute; top: 50%; transform: translateY(-50%); padding: 10px 14px; border-radius: 22px;
background: rgba(0, 0, 0, 0.7); color: #fff; font-weight: 700; font-size: 16px; pointer-events: none;
animation: nui-cover-skip 0.7s ease-out forwards;
}
.nui-pod-cover-skip.nui-left { left: 12px; }
.nui-pod-cover-skip.nui-right { right: 12px; }
@keyframes nui-cover-skip { from { opacity: 1; } to { opacity: 0; } }
body.eink #nui-gesture-sign { background: #000; transition: none; }
body.eink #nui-pull { transition: none; }
/* A hint that leads somewhere (Abos & Quellen). */
button.nui-pod-link { display: block; width: 100%; border: none; background: none; text-align: left; cursor: pointer; padding: 4px 2px 12px; }
.nui-pod-empty { padding: 32px 12px; color: var(--nui-muted); text-align: center; line-height: 1.5; font-family: var(--nui-sans); letter-spacing: normal; font-weight: 400; font-size: 14px; }
.nui-pod-list { display: flex; flex-direction: column; }
/* Headings by time in the episode lists (Heute, Gestern, Diese Woche, …). */
.nui-pod-when { padding: 14px 2px 4px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--nui-muted); font-family: var(--nui-sans); }
.nui-pod-when:first-child { padding-top: 4px; }
.nui-pod-player-link { cursor: pointer; }
.nui-pod-player-link:active { opacity: 0.6; }
/* The two lists (docs/podcasts.md): four tabs that fit a phone, the Merkliste by podcast, the Strom bundled. */
.nui-pod-tabs-v2 .nui-pod-tab { font-size: 13px; padding-left: 4px; padding-right: 4px; }
.nui-pod-group { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 2px; background: none; border: none; border-bottom: 1px solid var(--nui-line, rgba(127,127,127,.2)); color: inherit; font: inherit; text-align: left; cursor: pointer; }
.nui-pod-group .nui-pod-art, .nui-pod-group img { width: 40px; height: 40px; flex: none; }
.nui-pod-group-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.nui-pod-group-title { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nui-pod-group .nui-pod-meta { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nui-pod-group-count { font-size: 12px; color: var(--nui-muted); flex: none; }
.nui-pod-chev { flex: none; width: 18px; text-align: center; color: var(--nui-muted); }
.nui-pod-later .nui-pod-row { padding-left: 14px; }
.nui-pod-mini { min-width: 34px; padding: 0 4px; font-size: 17px; color: var(--nui-muted); flex: none; }
.nui-pod-mini.on { color: var(--accent, #e63946); }
.nui-pod-fresh .nui-pod-title::before { content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--accent, #e63946); margin-right: 6px; vertical-align: middle; }
.nui-pod-bundle.nui-pod-fresh::before { content: ''; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--accent, #e63946); margin-right: 6px; vertical-align: middle; }
.nui-pod-bundle { align-self: flex-start; margin: -2px 0 6px 56px; padding: 4px 0; background: none; border: none; color: var(--nui-muted); font: inherit; font-size: 12px; cursor: pointer; }
.nui-pod-bundled { padding-left: 14px; }
/* Stöbern (docs/podcasts.md). */
.nui-pod-browsehead { align-items: center; gap: 6px; justify-content: flex-start; }
.nui-pod-browsetitle { font-weight: 600; font-size: 15px; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nui-pod-browsechips { flex-wrap: wrap; overflow: visible; }
.nui-pod-chipcount { opacity: 0.6; font-size: 11px; }
.nui-pod-browsesec { margin-bottom: 6px; }
.nui-pod-reco .nui-pod-main { cursor: pointer; }
.nui-pod-reco-desc { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.nui-pod-similar { margin-top: 12px; }
.nui-pod-row {
display: flex;
align-items: center;
gap: 10px;
min-height: 58px;
padding: 5px 0;
border-bottom: 1px solid var(--border);
background: var(--bg);
-webkit-tap-highlight-color: transparent;
}
.nui-pod-row:active { background: var(--hover, #141414); }
.nui-pod-row.nui-pod-played .nui-pod-title { color: var(--nui-muted); font-weight: 400; }
.nui-pod-row.nui-pod-gone { display: none; }
.nui-pod-row.nui-pod-current .nui-pod-title { color: var(--accent); }
.nui-pod-row.nui-pod-current .nui-pod-title::before { content: '▶ '; }
.nui-pod-art {
flex: none;
width: 46px;
height: 46px;
border-radius: 4px;
overflow: hidden;
background: var(--raised, #1c1c1c);
display: flex;
align-items: center;
justify-content: center;
}
/* No cover anywhere: the podcast's initial on a neutral tile. */
.nui-pod-initial { font-size: 20px; font-weight: 700; color: var(--muted, #6a6a6a); line-height: 1; }
.nui-pod-art-big .nui-pod-initial { font-size: 30px; }
.nui-pod-art-player .nui-pod-initial { font-size: 96px; }
.nui-pod-art img { width: 100%; height: 100%; object-fit: cover; display: block; }
.nui-pod-art-big { width: 64px; height: 64px; }
.nui-pod-art-mini { width: 44px; height: 44px; margin-left: 10px; }
.nui-pod-art-player { width: min(64vw, 300px); height: min(64vw, 300px); border-radius: 8px; align-self: center; }
.nui-pod-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.nui-pod-title {
font-family: var(--nui-sans);
font-size: 14px;
font-weight: 600;
letter-spacing: normal;
line-height: 1.22;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
overflow-wrap: anywhere;
}
.nui-pod-meta {
font-family: var(--nui-sans);
font-size: 12px;
font-weight: 400;
letter-spacing: normal;
font-variant-numeric: tabular-nums;
color: var(--nui-muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.nui-pod-progress { height: 3px; margin-top: 2px; border-radius: 2px; background: var(--raised, #2a2a2a); overflow: hidden; max-width: 160px; }
.nui-pod-progress > span { display: block; height: 100%; background: var(--accent); }
.nui-pod-badge {
flex: none;
padding: 3px 7px;
border: 1px solid var(--border);
border-radius: 10px;
font-size: 11px;
color: var(--nui-muted);
}
.nui-pod-queued { color: var(--green); }
/* Narrow, and off the screen's edge: a swipe starting at the very edge (or sideways on the
handle, see dragSort) is the row's swipe; only a vertical drag on the handle sorts. */
.nui-pod-handle {
flex: none;
width: 28px;
height: var(--nui-tap);
margin-right: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
color: var(--nui-muted);
touch-action: none;
cursor: grab;
}
.nui-pod-queue .nui-pod-row { transition: transform 0.15s ease; }
.nui-pod-queue .nui-pod-row.nui-pod-dragging {
transition: none;
position: relative;
z-index: 2;
background: var(--raised, #1a1a1a);
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.6);
}
.nui-pod-feedhead { display: flex; align-items: center; gap: 10px; margin: 2px 0 6px; }
.nui-pod-feedhead > .nui-icon:first-child { min-width: 32px; margin-left: -6px; }
.nui-pod-feedhead .nui-pod-title { font-size: 16px; }
.nui-pod-feedhead .nui-pod-infobtn { min-width: 38px; }
.nui-pod-search { display: flex; gap: 8px; margin: 4px 0 10px; }
.nui-pod-search input { flex: 1; min-width: 0; min-height: var(--nui-tap); font-size: 16px; }
.nui-pod-search .btn { min-height: var(--nui-tap); }
/* mini player in the bottom bar */
#nui-pod-mini {
position: relative;
display: flex;
align-items: center;
gap: 2px;
height: 64px;
padding: 0 4px 0 0;
border-bottom: 1px solid var(--border);
}
#nui-pod-mini[hidden] { display: none; }
#nui-pod-mini [hidden] { display: none !important; }
.nui-pod-mini-bar { position: absolute; left: 0; right: 0; top: -1px; height: 2px; background: var(--raised, #2a2a2a); }
.nui-pod-mini-bar span { display: block; height: 100%; background: var(--accent); }
.nui-pod-skip { font-size: 20px; }
/* full player */
#nui-pod-player {
position: fixed;
inset: 0;
z-index: 880;
background: var(--scrim, rgba(0, 0, 0, 0.6));
display: flex;
align-items: flex-end;
}
.nui-pod-player-panel {
width: 100%;
max-height: 100%;
overflow-y: auto;
background: var(--panel, #0b0b0b);
border-top: 1px solid var(--border);
border-radius: 14px 14px 0 0;
padding: 8px 20px calc(24px + env(safe-area-inset-bottom, 0px));
display: flex;
flex-direction: column;
gap: 12px;
}
.nui-pod-player-top { display: flex; justify-content: center; }
.nui-pod-player-top .nui-icon { font-size: 26px; color: var(--nui-muted); }
.nui-pod-player-title { font-family: var(--nui-sans); font-size: 18px; font-weight: 600; letter-spacing: normal; line-height: 1.3; text-align: center; }
.nui-pod-player-feed { margin-top: -6px; font-family: var(--nui-sans); font-size: 13.5px; font-weight: 400; letter-spacing: normal; color: var(--nui-muted); text-align: center; }
.nui-pod-seek { width: 100%; accent-color: var(--accent); height: 28px; }
.nui-pod-times { display: flex; justify-content: space-between; margin-top: -8px; font-size: 12px; color: var(--nui-muted); font-variant-numeric: tabular-nums; }
.nui-pod-controls { display: flex; align-items: center; justify-content: center; gap: 28px; }
.nui-pod-controls .nui-icon { font-size: 18px; font-weight: 700; }
.nui-pod-back::before { content: '↺'; font-size: 26px; margin-right: 2px; }
.nui-pod-fwd::after { content: '↻'; font-size: 26px; margin-left: 2px; }
.nui-pod-play {
width: 72px;
height: 72px;
border-radius: 50%;
background: var(--accent) !important;
color: var(--on-accent, #fff) !important;
font-size: 26px !important;
}
.nui-pod-extra { display: flex; justify-content: space-around; }
.nui-pod-speed { font-size: 15px !important; font-weight: 700; min-width: 64px; }
/* Another device plays (player sync): the bar and the player show it and control it there. */
.nui-mini-remote .nui-mini-track,
.nui-pod-remote-line { color: var(--accent); }
.nui-pod-remote-line { font-weight: 700; }
.nui-mini-devices,
.nui-mini-here { font-size: 20px; }
.nui-pod-here,
.nui-pod-devbtn { align-self: center; min-height: var(--nui-tap); }
.nui-pod-devnote { padding: 8px 16px 4px; }
body.eink .nui-mini-remote .nui-mini-track,
body.eink .nui-pod-remote-line { color: #000; }
/* e-reader mode on a phone: black on white */
body.eink .nui-pod-row { background: #fff; }
body.eink .nui-pod-row:active { background: #ddd; }
body.eink .nui-pod-count { background: #ddd; color: #000; }
body.eink .nui-pod-tab.active { border-bottom-color: #000; color: #000; }
body.eink .nui-pod-progress { background: #ccc; }
body.eink .nui-pod-progress > span,
body.eink .nui-pod-mini-bar span { background: #000; }
body.eink .nui-pod-row.nui-pod-current .nui-pod-title { color: #000; }
body.eink .nui-pod-player-panel { background: #fff; border-top: 2px solid #000; }
body.eink .nui-pod-play { background: #000 !important; }
body.eink .nui-pod-art { background: #eee; }
/* podcast queue tools: sort, choose several, lock */
.nui-pod-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.nui-pod-head .nui-pod-summary { padding: 6px 2px; }
.nui-pod-tools { display: flex; align-items: center; margin-right: -6px; }
.nui-pod-tools .nui-icon { font-size: 18px; color: var(--nui-muted); }
.nui-pod-lock.on { color: var(--fg, #fff) !important; }
.nui-pod-selbar {
position: sticky;
top: 0;
z-index: 5;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px 6px;
margin: 0 -12px 4px;
padding: 6px 12px 8px;
background: var(--bg);
border-bottom: 1px solid var(--border);
}
.nui-pod-selcount { flex: 1; min-width: 0; font-size: 14px; font-weight: 700; }
.nui-pod-selactions { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 6px; }
.nui-pod-selactions .btn { min-height: 38px; flex: 1 0 auto; }
.nui-pod-selactions .btn:disabled { opacity: 0.4; }
.nui-pod-check { flex: none; width: 28px; font-size: 22px; color: var(--nui-muted); text-align: center; }
.nui-pod-check.on { color: var(--fg, #fff); }
.nui-pod-row.nui-pod-selecting { user-select: none; -webkit-user-select: none; }
body.eink .nui-pod-check.on,
body.eink .nui-pod-lock.on { color: #000 !important; }
body.eink .nui-pod-selbar { background: #fff; }
/* podcast chips (the list filters), sleep timer */
.nui-pod-chip {
display: inline-flex;
align-items: baseline;
gap: 6px;
min-height: 36px;
padding: 6px 12px;
border: 1px solid var(--border);
border-radius: 18px;
background: none;
color: var(--nui-muted);
font: inherit;
font-size: 13px;
}
.nui-pod-chip strong { color: inherit; font-weight: 700; }
.nui-pod-chip.on { border-color: var(--border-strong, #8a8a8a); color: var(--fg, #fff); font-weight: 700; }
.nui-pod-sleep { font-size: 15px !important; white-space: nowrap; }
.nui-pod-sleep.on { color: var(--accent) !important; font-weight: 700; }
body.eink .nui-pod-chip.on { border-color: #000; }
body.eink .nui-pod-chip.on strong,
body.eink .nui-pod-sleep.on { color: #000 !important; }
/* podcast chapters and shownotes */
/* flex: none – in the sheet's scrolling column the box would otherwise shrink to its 40 px and
the notes spill over what comes after (the similar episodes). */
.nui-pod-notesbox { flex: none; margin-top: 6px; border-top: 1px solid var(--border); padding-top: 6px; min-height: 40px; }
.nui-pod-subtabs { display: flex; gap: 4px; margin-bottom: 6px; }
.nui-pod-subtab {
min-height: 36px;
padding: 0 12px;
border: none;
border-bottom: 2px solid transparent;
background: none;
color: var(--nui-muted);
font: inherit;
font-size: 14px;
}
.nui-pod-subtab.active { color: inherit; font-weight: 700; border-bottom-color: var(--fg, #fff); }
.nui-pod-chapters { list-style: none; margin: 0; padding: 0; }
.nui-pod-chapter {
display: grid;
grid-template-columns: 4.5em 1fr;
gap: 10px;
align-items: baseline;
padding: 10px 4px;
border-bottom: 1px solid var(--border);
font-size: 14px;
cursor: pointer;
}
.nui-pod-chapter-title { font-family: var(--nui-sans); letter-spacing: normal; font-weight: 400; font-size: 14.5px; }
.nui-pod-chapter.current .nui-pod-chapter-title { font-weight: 600; }
.nui-pod-chapter-t { color: var(--nui-muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.nui-pod-chapter.current { color: var(--accent); font-weight: 700; }
.nui-pod-chapter.current .nui-pod-chapter-t { color: var(--accent); }
.nui-pod-notes { font-family: var(--nui-sans); font-size: 14.5px; font-weight: 400; letter-spacing: normal; line-height: 1.55; overflow-wrap: anywhere; }
.nui-pod-notes img { max-width: 100%; height: auto; }
.nui-pod-notes a { color: inherit; text-decoration: underline; text-decoration-color: var(--muted, #777); }
.nui-pod-notes .nui-pod-stamp { font-weight: 700; text-decoration: none; border-bottom: 1px dotted currentColor; }
.nui-pod-notes table { display: block; overflow-x: auto; }
.nui-pod-notes-sheet .nui-pod-player-panel { max-height: 88%; }
.nui-pod-notes-play { align-self: center; min-height: var(--nui-tap); }
/* The episode screen (a tap on a row): head, the big play button, the actions, then notes. */
.nui-pod-episode .nui-pod-player-panel { max-height: 92%; }
.nui-pod-ephead { display: flex; align-items: flex-start; gap: 12px; }
.nui-pod-ephead .nui-pod-art-big { width: 88px; height: 88px; border-radius: 6px; flex: none; }
.nui-pod-ephead .nui-pod-player-title { text-align: left; font-size: 17px; }
.nui-pod-eplink { align-self: flex-start; border: none; background: none; padding: 4px 0; color: var(--nui-muted); font: inherit; font-size: 14px; text-align: left; cursor: pointer; text-decoration: underline; text-decoration-color: var(--border-strong, #555); }
.nui-pod-epplay { align-self: stretch; font-size: 16px; font-weight: 700; }
.nui-pod-epactions { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 6px; }
.nui-pod-epact { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-height: 60px; padding: 6px 4px; border: 1px solid var(--border); border-radius: 8px; background: none; color: inherit; font: inherit; font-size: 12.5px; line-height: 1.2; text-align: center; cursor: pointer; }
.nui-pod-epact-icon { font-size: 20px; line-height: 22px; }
.nui-pod-epact.on .nui-pod-epact-icon { color: var(--accent); }
.nui-pod-epact-danger { color: var(--red, #e5484d); }
/* Transcript and article of an episode (the Transkript / Artikel tabs, the transcription settings). */
.nui-pod-tr { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: 6px 2px; }
.nui-pod-tr-status { font-size: 14.5px; font-weight: 600; }
.nui-pod-tr-error { font-size: 14px; color: var(--red, #e5484d); }
.nui-pod-tr-origin { margin-bottom: 6px; font-style: italic; }
.nui-pod-trbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 4px 0 10px; }
.nui-pod-trbtn { min-height: 40px; }
.nui-pod-article h2 { font-size: 17px; margin: 1.2em 0 0.2em; }
.nui-pod-article p { margin: 0.5em 0; }
.nui-pod-article blockquote { margin: 0.6em 0; padding-left: 12px; border-left: 3px solid var(--border); }
.nui-pod-trform { display: flex; flex-direction: column; gap: 10px; }
.nui-pod-trfield { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--nui-muted); }
.nui-pod-trfield input, .nui-pod-trfield select { width: 100%; box-sizing: border-box; font-size: 15px; color: inherit; }
.nui-pod-trfield[hidden] { display: none; }
body.eink .nui-pod-tr-error { color: #000; }
body.eink .nui-pod-epact { border-color: #000; color: #000; }
body.eink .nui-pod-epact-danger { color: #000; }
body.eink .nui-pod-chapter.current,
body.eink .nui-pod-chapter.current .nui-pod-chapter-t,
body.eink .nui-pod-notes a { color: #000; }
body.eink .nui-pod-subtab.active { border-bottom-color: #000; color: #000; }
/* ---- podcast downloads (Downloads.kt; the "downloads" block of native-podcast.js) ---- */
.nui-pod-dl { min-width: 36px !important; margin-left: -6px; font-size: 22px; color: var(--nui-muted); }
.nui-pod-dl-failed { color: var(--yellow); }
/* ✓ in a ring: set apart from the plain green ✓ of "in der Warteschlange" */
.nui-pod-dl.nui-pod-dl-done {
position: relative;
font-size: 12px;
font-weight: 700;
color: var(--green);
}
.nui-pod-dl-done::after {
content: '';
position: absolute;
width: 20px;
height: 20px;
left: 50%;
top: 50%;
margin: -11px 0 0 -11px;
border: 1px solid var(--green);
border-radius: 50%;
}
.nui-pod-dl-ring > span {
width: 26px;
height: 26px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: 700;
color: var(--nui-muted);
background:
radial-gradient(closest-side, var(--bg) 78%, transparent 80% 100%),
conic-gradient(var(--muted, #d0d0d0) var(--p, 0%), var(--raised, #2a2a2a) 0);
}
body.eink .nui-pod-dl-done { color: #000; }
body.eink .nui-pod-dl-done::after { border-color: #000; }
body.eink .nui-pod-dl-ring > span {
color: #000;
background:
radial-gradient(closest-side, #fff 78%, transparent 80% 100%),
conic-gradient(#000 var(--p, 0%), #ccc 0);
}
/* the top bar's "↓ 3/68" and the downloads overview (openDownloads) */
.nui-pod-dlind { min-width: 0 !important; padding: 0 8px; font-size: 13px !important; font-weight: 700; color: var(--fg, #fff); white-space: nowrap; font-variant-numeric: tabular-nums; }
.nui-pod-dlind[hidden] { display: none !important; }
.nui-pod-dls .nui-pod-player-panel { min-height: 50%; }
.nui-pod-dls-head { display: flex; flex-direction: column; gap: 2px; }
.nui-pod-dls-head .nui-pod-summary { padding: 0 2px; text-align: center; }
.nui-pod-dls-head .nui-pod-offer-row { justify-content: center; }
.nui-pod-dls-head .btn { min-width: 0 !important; padding: 0 14px; font-size: 15px !important; }
.nui-pod-dls-sec { margin-top: 10px; padding: 4px 2px; font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--nui-muted); border-bottom: 1px solid var(--border); }
.nui-pod-dlrow { display: flex; align-items: center; gap: 4px; min-height: 56px; padding: 6px 0; border-bottom: 1px solid var(--border); -webkit-tap-highlight-color: transparent; }
.nui-pod-dlrow:active { background: var(--hover, #141414); }
.nui-pod-dlrow .nui-pod-title { font-size: 14px; -webkit-line-clamp: 1; }
.nui-pod-dlrow .nui-icon { font-size: 18px; color: var(--nui-muted); }
.nui-pod-dlrow-failed .nui-pod-dlstatus { color: var(--yellow); }
.nui-pod-dls-done { padding: 8px 2px; white-space: normal; }
body.eink .nui-pod-dlind { color: #000; }
body.eink .nui-pod-dlrow:active { background: #ddd; }
body.eink .nui-pod-dlrow-failed .nui-pod-dlstatus { color: #000; font-weight: 700; }
body.eink .nui-pod-dls-sec { color: #000; border-bottom-color: #000; }
/* tab row scrolls sideways without a visible bar; the lock emoji in the app's greys */
.nui-pod-tabs::-webkit-scrollbar { display: none; }
.nui-pod-lock { filter: grayscale(1); opacity: 0.6; }
.nui-pod-lock.on { opacity: 1; filter: grayscale(1) brightness(1.4); }
/* episode filters: one row that scrolls sideways */
.nui-pod-filters { display: flex; gap: 6px; overflow-x: auto; padding: 6px 0 10px; scrollbar-width: none; }
.nui-pod-filters::-webkit-scrollbar { display: none; }
.nui-pod-filters .nui-pod-chip { flex: none; }
.nui-pod-more { display: block; margin: 12px auto; min-height: var(--nui-tap); }
.nui-pod-star { color: var(--yellow); }
.nui-pod-fav.on { color: var(--yellow) !important; }
.nui-pod-stat-total { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 12px 0 18px; }
.nui-pod-stat-total strong { font-size: 30px; }
.nui-pod-stat-total span { font-size: 13px; color: var(--nui-muted); }
.nui-pod-stat-row { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--border); }
.nui-pod-stat-bar { max-width: none; height: 5px; }
body.eink .nui-pod-star, body.eink .nui-pod-fav.on { color: #000 !important; }
/* feed errors, chapter navigation, transcript */
.nui-pod-feederr { font-size: 12px; color: var(--yellow); }
.nui-pod-offer { padding: 10px 12px; margin: 8px 0; border: 1px solid var(--nui-muted); border-radius: 6px; line-height: 1.45; font-size: 14px; font-family: var(--nui-sans); letter-spacing: normal; font-weight: 400; }
.nui-pod-offer-row { display: flex; gap: 8px; margin-top: 8px; }
.nui-pod-feederr-box { padding: 8px 10px; margin: 4px 0 8px; border: 1px solid var(--yellow); border-radius: 6px; line-height: 1.4; }
.nui-pod-transcript { max-height: 60vh; overflow-y: auto; padding-right: 4px; }
.nui-pod-seg { margin: 0; padding: 6px 4px; font-family: var(--nui-sans); letter-spacing: normal; font-weight: 400; font-size: 14.5px; line-height: 1.5; color: var(--nui-muted); border-radius: 4px; cursor: pointer; }
.nui-pod-seg.current { color: inherit; background: var(--raised, #1a1a1a); }
.nui-pod-speaker { color: inherit; }
body.eink .nui-pod-feederr { color: #000; }
body.eink .nui-pod-feederr-box { border-color: #000; }
body.eink .nui-pod-offer { border-color: #000; }
body.eink .nui-pod-seg { color: #444; }
body.eink .nui-pod-seg.current { color: #000; background: #e6e6e6; }
/* lists: search sections, the number at a podcast, its info page */
.nui-pod-sec { margin-top: 14px; padding: 4px 2px; font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--nui-muted); border-bottom: 1px solid var(--border); }
.nui-pod-search + .nui-pod-sec { margin-top: 4px; }
.nui-pod-sec-note { padding: 10px 2px; font-size: 13px; color: var(--nui-muted); }
.nui-pod-feedcount { flex: none; }
.nui-pod-infobtn { flex: none; font-size: 20px; color: var(--nui-muted); }
.nui-pod-info-desc { font-family: var(--nui-sans); letter-spacing: normal; font-size: 14.5px; font-weight: 400; line-height: 1.5; white-space: pre-line; overflow-wrap: anywhere; padding: 4px 0 10px; border-bottom: 1px solid var(--border); }
.nui-pod-facts { font-weight: 400; display: grid; grid-template-columns: max-content 1fr; gap: 8px 14px; margin: 10px 0 4px; font-size: 14px; }
.nui-pod-facts dt { color: var(--nui-muted); }
.nui-pod-facts dd { margin: 0; min-width: 0; font-weight: 400; overflow-wrap: anywhere; }
.nui-pod-facts a { color: inherit; text-decoration: underline; text-decoration-color: var(--muted, #777); }
.nui-pod-info-url { display: block; font-size: 12px; color: var(--nui-muted); }
.nui-pod-info-actions { display: flex; gap: 8px; margin-top: 6px; }
.nui-pod-info-actions .btn { min-height: 36px; padding: 0 14px; font-size: 14px; }
body.eink .nui-pod-sec { color: #000; border-bottom-color: #000; }
body.eink .nui-pod-facts a { color: #000; text-decoration: underline; }
/* ---- UI round: rows, swipes, the feed page's line, the player's chapters ------------------ */
/* the row's one action, its menu, the download mark */
.nui-pod-row > .nui-icon { min-width: 40px; }
.nui-pod-row > .nui-pod-menu { min-width: 34px; font-size: 18px; color: var(--nui-muted); margin-right: -4px; }
.nui-pod-playbtn { font-size: 17px !important; color: var(--accent); }
.nui-pod-row > .nui-pod-dl { min-width: 40px !important; margin-left: 0; }
.nui-pod-dlmark {
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
margin-right: 5px;
vertical-align: -2px;
border-radius: 50%;
border: 1px solid var(--border-strong, #8a8a8a);
font-size: 9px;
font-weight: 700;
line-height: 1;
color: var(--muted, #cfcfcf);
}
.nui-pod-dlmark-done { background: var(--raised, #3a3a3a); border-color: var(--raised, #3a3a3a); color: var(--fg, #fff); }
.nui-pod-dlmark-failed { border-color: var(--yellow); color: var(--yellow); }
.nui-pod-dlmark-queued,
.nui-pod-dlmark-downloading {
border: none;
background:
radial-gradient(closest-side, var(--bg) 62%, transparent 66% 100%),
conic-gradient(var(--muted, #d0d0d0) var(--p, 0%), var(--raised, #3a3a3a) 0);
}
.nui-pod-queued { font-size: 18px !important; }
/* swiping a row: it moves, what the swipe does shows underneath */
.nui-pod-list { position: relative; }
.nui-pod-list > .nui-pod-row { touch-action: pan-y; }
.nui-pod-row.nui-pod-swiping { position: relative; z-index: 1; will-change: transform; }
.nui-pod-swipebg {
position: absolute;
left: 0;
right: 0;
z-index: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 14px;
background: var(--hover, #161616);
color: var(--nui-muted);
font-size: 14px;
white-space: nowrap;
pointer-events: none;
}
.nui-pod-swipebg.armed { background: var(--raised, #2c2c2c); color: var(--fg, #fff); }
/* Behind the row: the icon, under it the action in bold and what it means for this episode
(narrow, so it shows whole by the time the swipe is armed). */
.nui-pod-swipe-l, .nui-pod-swipe-r { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 0; }
.nui-pod-swipe-r { align-items: flex-end; }
.nui-pod-swipe-icon { font-size: 18px; line-height: 22px; }
.nui-pod-swipe-text { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; font-family: var(--nui-sans); letter-spacing: normal; }
.nui-pod-swipe-r .nui-pod-swipe-text { align-items: flex-end; text-align: right; }
.nui-pod-swipe-text b { font-weight: 700; font-size: 13px; }
.nui-pod-swipe-text small { font-size: 12px; font-weight: 400; opacity: 0.75; }
#nui-pod-undo {
position: fixed;
left: 50%;
bottom: calc(var(--nui-dock-h, 124px) + 12px + env(safe-area-inset-bottom, 0px));
transform: translateX(-50%);
z-index: 950;
display: flex;
align-items: center;
gap: 14px;
max-width: calc(100% - 24px);
padding: 4px 6px 4px 16px;
border-radius: 8px;
background: #262626;
color: #fff;
font-size: 14px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
opacity: 0;
pointer-events: none;
transition: opacity 0.18s;
}
#nui-pod-undo.nui-show { opacity: 1; pointer-events: auto; }
/* Line icons (native-podcast.js svgIcon): stroke in the text's colour. */
.nui-svg { display: inline-flex; align-items: center; justify-content: center; line-height: 0; }
.nui-svg svg { display: block; }
.nui-row-icon .nui-svg { width: 100%; }
.nui-pod-selactions .btn .nui-svg { margin-right: 6px; vertical-align: -3px; }
.nui-pod-undo-icon { display: inline-flex; margin-right: -6px; }
.nui-pod-undo-icon[hidden] { display: none; }
.nui-pod-undo-text { font-family: var(--nui-sans); letter-spacing: normal; font-weight: 400; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nui-pod-undo-btn {
min-height: 40px;
padding: 0 10px;
border: none;
background: none;
color: #fff;
font: inherit;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
cursor: pointer;
}
/* the top bar's search */
.nui-pod-searchbtn svg { display: block; }
.nui-pod-searchbtn.on { color: var(--fg, #fff); }
/* the feed page: one quiet line instead of the settings, the ⚙ sheet's parts */
.nui-pod-feedsum {
display: block;
width: 100%;
margin: -2px 0 6px;
padding: 2px 0 8px;
border: none;
border-bottom: 1px solid var(--border);
background: none;
color: var(--nui-muted);
font-family: var(--nui-sans);
font-size: 13px;
font-weight: 400;
letter-spacing: normal;
line-height: 1.4;
text-align: left;
cursor: pointer;
}
.nui-pod-gear { font-size: 22px !important; }
.nui-pod-sheetsep { height: 1px; margin: 6px 20px; background: var(--border); }
.nui-pod-sheetnote { padding: 2px 20px 10px; white-space: normal; line-height: 1.45; font-size: 13px; }
/* the player's chapters, right under the title */
.nui-pod-chapbox { margin-top: -4px; border: 1px solid var(--border); border-radius: 8px; padding: 2px 4px 2px 10px; }
.nui-pod-chapbox[hidden] { display: none; }
/* the Podcast-Radio (diora-web docs/podcasts.md): what comes next, + and "Normal weiterhören" */
.nui-pod-radiobox { margin-top: -4px; border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px 6px 10px; }
.nui-pod-radiobox[hidden] { display: none; }
.nui-pod-radionext { font-size: 12px; color: var(--nui-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nui-pod-radionext:empty { display: none; }
.nui-pod-radioacts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.nui-pod-radioacts .nui-icon { width: auto !important; padding: 0 12px !important; font-size: 13px !important; border: 1px solid var(--border); border-radius: 16px; }
body.eink .nui-pod-radiobox, body.eink .nui-pod-radioacts .nui-icon { border-color: #000; }
.nui-pod-chaphead { display: flex; align-items: center; gap: 2px; min-height: 40px; }
.nui-pod-chapcount { flex: 1; min-width: 0; font-size: 12px; color: var(--nui-muted); font-variant-numeric: tabular-nums; }
.nui-pod-chapbtn { min-width: 40px !important; min-height: 40px !important; font-size: 16px !important; }
.nui-pod-chaplist { position: relative; max-height: 168px; overflow-y: auto; margin: 0 -4px 4px -10px; padding: 0 4px 0 10px; border-top: 1px solid var(--border); }
.nui-pod-chaplist .nui-pod-chapter { padding: 8px 4px; }
.nui-pod-chaplist .nui-pod-chapter:last-child { border-bottom: none; }
.nui-pod-withchapters .nui-pod-art-player { width: min(46vw, 220px); height: min(46vw, 220px); }
/* the downloads overview: the finished ones as a list */
.nui-pod-dls-donerow { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.nui-pod-dls-show { min-height: 36px; padding: 0 12px; font-size: 14px !important; }
body.eink .nui-pod-count-queue { background: #000; color: #fff; }
body.eink .nui-pod-tab.active .nui-pod-count { background: #000; color: #fff; }
body.eink .nui-pod-playbtn { color: #000; }
body.eink .nui-pod-dlmark { border-color: #000; color: #000; }
body.eink .nui-pod-dlmark-done { background: #000; color: #fff; }
body.eink .nui-pod-dlmark-queued,
body.eink .nui-pod-dlmark-downloading {
background:
radial-gradient(closest-side, #fff 62%, transparent 66% 100%),
conic-gradient(#000 var(--p, 0%), #ccc 0);
}
body.eink .nui-pod-swipebg { background: #eee; color: #444; }
body.eink .nui-pod-swipebg.armed { background: #000; color: #fff; }
body.eink #nui-pod-undo { background: #000; box-shadow: none; }
body.eink .nui-pod-initial { color: #555; }
body.eink .nui-pod-feedsum { color: #444; border-bottom-color: #000; }
body.eink .nui-pod-chapbox { border-color: #000; }
body.eink .nui-pod-chip.on { border-color: #000; color: #000; }
body.eink .nui-pod-notes a,
body.eink .nui-pod-facts a { text-decoration-color: #000; }
/* A prompt (customPrompt: an own sleep time, an own speed) opened from the player or a
sheet comes above both (app.css has it at 500/501, under them). */
.modal-overlay { z-index: 990; }
.modal-dialog { z-index: 991; }
/* Ambient's sleep timer: a ☾ on the synthesizer's frame, top right (native-podcast.js). */
#tab-ambient { position: relative; }
#nui-amb-sleep {
position: absolute;
top: 10px;
right: 10px;
z-index: 2;
min-width: 44px;
height: 36px;
padding: 0 12px;
border-radius: 18px;
border: 1px solid rgba(255, 255, 255, 0.18);
background: rgba(0, 0, 0, 0.55);
color: #ddd;
}
.nui-section-bar #nui-amb-sleep {
position: static;
background: none;
border-color: transparent;
color: inherit;
}
.nui-section-bar #nui-amb-sleep.on { border-color: var(--accent); }