+
);
}
diff --git a/frontend/src/styles/app.css b/frontend/src/styles/app.css
index 30d9f3a..f7d85ec 100644
--- a/frontend/src/styles/app.css
+++ b/frontend/src/styles/app.css
@@ -459,6 +459,7 @@ body {
.hardware-monitor-head {
display: flex;
flex-wrap: wrap;
+ justify-content: center;
gap: 0.45rem;
margin-bottom: 0.7rem;
}
@@ -466,13 +467,16 @@ body {
.hardware-monitor-grid {
display: flex;
flex-direction: row;
- flex-wrap: nowrap;
+ flex-wrap: wrap;
gap: 0.75rem;
align-items: stretch;
+ justify-content: center;
+ width: 100%;
}
.hardware-monitor-grid > .hardware-monitor-block {
- flex: 0 0 calc(33.333% - 0.5rem);
+ flex: 1 1 18rem;
+ max-width: 24rem;
min-width: 0;
}
@@ -484,6 +488,8 @@ body {
display: grid;
gap: 0.55rem;
align-content: start;
+ justify-items: center;
+ text-align: center;
}
.hardware-monitor-block h4 {
@@ -498,9 +504,10 @@ body {
.hardware-cpu-summary {
display: flex;
- flex-wrap: nowrap;
+ flex-wrap: wrap;
gap: 0.35rem;
align-items: center;
+ justify-content: center;
min-width: 0;
overflow: hidden;
}
@@ -597,9 +604,10 @@ body {
display: flex;
flex-wrap: wrap;
align-items: center;
+ justify-content: center;
gap: 0.2rem 0.3rem;
padding: 0.3rem 0.45rem;
- text-align: left;
+ text-align: center;
overflow: hidden;
}
@@ -607,14 +615,14 @@ body {
font-size: 0.74rem;
font-weight: 700;
color: var(--rip-brown-700);
- min-width: 2.2rem;
+ min-width: 0;
}
.hardware-core-metric {
display: inline-flex;
align-items: center;
gap: 0.28rem;
- justify-self: start;
+ justify-self: center;
}
.hardware-core-metric .pi {
@@ -628,6 +636,73 @@ body {
gap: 0.45rem;
}
+.hardware-panel-section {
+ display: grid;
+ gap: 0.45rem;
+}
+
+.hardware-panel-section h4 {
+ margin: 0;
+}
+
+.hardware-panel-section-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.4rem;
+}
+
+.hardware-panel-link-btn.p-button {
+ width: 1.8rem;
+ height: 1.8rem;
+ color: var(--rip-brown-700);
+}
+
+.hardware-panel-divider {
+ border-top: 1px solid var(--surface-border);
+ margin: 0.75rem 0;
+}
+
+.hardware-mini-monitor-list {
+ display: grid;
+ gap: 0.45rem;
+}
+
+.hardware-mini-monitor-item {
+ border: 1px dashed var(--rip-border);
+ border-radius: 0.45rem;
+ padding: 0.45rem 0.55rem;
+ background: var(--rip-panel);
+ display: grid;
+ gap: 0.15rem;
+}
+
+.hardware-mini-monitor-item strong {
+ font-size: 0.82rem;
+}
+
+.hardware-mini-monitor-line {
+ display: flex;
+ align-items: center;
+ gap: 0.38rem;
+ flex-wrap: wrap;
+}
+
+.hardware-mini-monitor-metric {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.35rem;
+}
+
+.hardware-mini-monitor-sep {
+ color: var(--rip-muted);
+}
+
+.hardware-mini-monitor-metric .pi {
+ font-size: 0.78rem;
+ color: var(--rip-brown-700);
+}
+
.hardware-gpu-item,
.hardware-storage-item {
border: 1px dashed var(--rip-border);
@@ -642,12 +717,14 @@ body {
display: flex;
flex-wrap: wrap;
align-items: center;
+ justify-content: center;
gap: 0.25rem 0.35rem;
}
.hardware-gpu-item strong {
flex: 0 0 100%;
font-size: 0.82rem;
+ text-align: center;
}
.hardware-gpu-chip {
@@ -1213,6 +1290,33 @@ body {
white-space: nowrap;
}
+.queue-running-progress {
+ margin-top: 0.15rem;
+}
+
+.queue-running-progress .p-progressbar {
+ height: 0.34rem;
+}
+
+.queue-nonjob-subtitle {
+ display: flex;
+ align-items: center;
+ gap: 0.35rem;
+}
+
+.queue-nonjob-subtitle i {
+ font-size: 0.82rem;
+ color: var(--rip-muted);
+ flex: 0 0 auto;
+}
+
+.queue-nonjob-subtitle span {
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.pipeline-queue-drag-handle {
cursor: grab;
color: var(--rip-muted);
@@ -1802,6 +1906,11 @@ body {
display: grid;
grid-template-columns: 1fr auto;
gap: 0.5rem;
+}
+
+.metadata-dialog-controls {
+ display: grid;
+ gap: 0.75rem;
margin-bottom: 0.75rem;
}
@@ -1809,7 +1918,6 @@ body {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.5rem;
- margin-bottom: 0.75rem;
align-items: start;
}
@@ -1817,6 +1925,13 @@ body {
grid-template-columns: 1fr;
}
+.metadata-result-filter-row {
+ display: flex;
+ justify-content: flex-start;
+ gap: 0.5rem;
+ flex-wrap: wrap;
+}
+
.metadata-filter-disc {
display: grid;
gap: 0.2rem;
@@ -2047,6 +2162,35 @@ body {
color: var(--rip-muted);
}
+.activation-bytes-cache-box p {
+ margin: 0;
+}
+
+.activation-bytes-table-wrap {
+ width: 100%;
+ overflow-x: auto;
+}
+
+.activation-bytes-table {
+ width: 100%;
+ border-collapse: collapse;
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.82rem;
+}
+
+.activation-bytes-table th,
+.activation-bytes-table td {
+ text-align: left;
+ padding: 0.45rem 0.6rem;
+ border-bottom: 1px solid var(--surface-border);
+ white-space: nowrap;
+}
+
+.activation-bytes-table th {
+ color: var(--rip-brown-800);
+ font-weight: 700;
+}
+
.setting-row {
display: grid;
gap: 0.25rem;
@@ -2222,6 +2366,56 @@ body {
font-size: 0.9rem;
}
+.quick-access-list {
+ display: grid;
+ gap: 0.42rem;
+}
+
+.quick-access-empty {
+ margin: 0.2rem 0 0;
+ font-size: 0.82rem;
+ color: var(--rip-muted);
+}
+
+.quick-access-item {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto;
+ align-items: center;
+ gap: 0.35rem;
+ padding: 0.3rem 0.45rem;
+ border: 1px solid var(--rip-border);
+ border-radius: 0.4rem;
+ background: var(--rip-panel-soft);
+}
+
+.quick-access-item-main {
+ display: flex;
+ align-items: center;
+ min-width: 0;
+}
+
+.quick-access-item-title {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.32rem;
+ font-size: 0.83rem;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.quick-access-item-title-icon {
+ font-size: 0.75rem;
+ color: var(--rip-muted);
+ flex: 0 0 auto;
+}
+
+.quick-access-run-btn.p-button.p-button-icon-only {
+ width: 1.5rem;
+ height: 1.5rem;
+ padding: 0;
+}
+
.converter-scan-extensions-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(7.2rem, 1fr));
@@ -2769,6 +2963,14 @@ body {
min-width: 0;
}
+.chain-description-line {
+ display: block;
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.script-title-line {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
@@ -2791,7 +2993,7 @@ body {
.script-list-actions {
display: grid;
- grid-template-columns: repeat(3, minmax(0, 1fr));
+ grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.45rem;
}
@@ -2810,6 +3012,16 @@ body {
font-size: 0.8rem;
}
+@media (max-width: 1750px) {
+ .script-list--reorderable .script-list-item:not(.script-list-item-editing) {
+ grid-template-columns: auto minmax(0, 1fr) minmax(14.5rem, auto);
+ }
+
+ .script-list-actions {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
.script-action-spacer {
display: block;
}
@@ -2840,6 +3052,31 @@ body {
min-width: 0;
}
+.preset-list {
+ display: grid;
+ gap: 0.45rem;
+}
+
+.preset-list-item {
+ grid-template-columns: minmax(0, 1fr) minmax(19rem, 40%);
+ align-items: center;
+ gap: 0.65rem;
+}
+
+.preset-list-actions .p-button {
+ min-height: 2.35rem;
+}
+
+@media (max-width: 1400px) {
+ .preset-list-item {
+ grid-template-columns: 1fr;
+ }
+
+ .preset-list-actions {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
@media (max-width: 900px) {
.user-preset-default-grid {
grid-template-columns: 1fr;
@@ -4342,12 +4579,16 @@ body {
}
.job-detail-dialog .p-dialog-content,
-.metadata-selection-dialog .p-dialog-content,
.disc-detected-dialog .p-dialog-content {
max-height: min(80vh, 56rem);
overflow: auto;
}
+.metadata-selection-dialog .p-dialog-content {
+ max-height: min(84vh, 60rem);
+ overflow: hidden;
+}
+
.job-detail-dialog,
.metadata-selection-dialog,
.disc-detected-dialog {
@@ -4479,9 +4720,9 @@ body {
.hardware-core-item.compact {
grid-template-columns: auto auto auto;
align-items: center;
- justify-content: start;
+ justify-content: center;
gap: 0.3rem;
- text-align: left;
+ text-align: center;
}
.hardware-core-grid.compact {
@@ -4493,7 +4734,7 @@ body {
}
.hardware-core-metric {
- justify-self: start;
+ justify-self: center;
}
.history-dv-item-list {
@@ -5531,8 +5772,409 @@ body {
flex-wrap: wrap;
}
+/* ===== Hardware Detail Page ===== */
+
+.hardware-detail-page {
+ display: grid;
+ gap: 1rem;
+}
+
+.hardware-detail-hero .p-card-content,
+.hardware-detail-card .p-card-content,
+.hardware-detail-empty .p-card-content {
+ padding-top: 0.2rem;
+}
+
+.hardware-detail-hero {
+ border: 1px solid var(--rip-border);
+ background: #ffffff;
+ color: var(--text-color);
+}
+
+.hardware-detail-hero-head {
+ display: flex;
+ justify-content: space-between;
+ gap: 0.8rem;
+ align-items: flex-start;
+ flex-wrap: wrap;
+}
+
+.hardware-detail-hero-head h2 {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 700;
+ line-height: 1.2;
+}
+
+.hardware-detail-hero-head small {
+ color: var(--rip-muted);
+}
+
+.hardware-detail-hero-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.45rem;
+}
+
+.hardware-detail-empty {
+ border: 1px solid var(--rip-border);
+}
+
+.hardware-detail-empty h3 {
+ margin: 0 0 0.45rem;
+}
+
+.hardware-detail-empty p {
+ margin: 0 0 0.9rem;
+ color: var(--rip-muted);
+}
+
+.hardware-detail-grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 1rem;
+}
+
+.hardware-detail-card {
+ border: 1px solid var(--rip-border);
+ background: #ffffff;
+ color: var(--text-color);
+}
+
+.hardware-detail-card h3 {
+ margin: 0;
+ font-size: 1rem;
+ line-height: 1.25;
+ font-weight: 700;
+}
+
+.hardware-detail-card h4 {
+ margin: 0;
+ font-size: 0.9rem;
+ font-weight: 700;
+}
+
+.hardware-detail-card small {
+ color: var(--rip-muted);
+}
+
+.hardware-detail-card-head {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ margin-bottom: 0.85rem;
+}
+
+.hardware-detail-card-icon {
+ width: 2.4rem;
+ height: 2.4rem;
+ border-radius: 0.5rem;
+ background: #f5f1e7;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.hardware-detail-card-icon .pi {
+ font-size: 0.95rem;
+}
+
+.hardware-detail-gauge-layout {
+ display: grid;
+ grid-template-columns: 170px minmax(0, 1fr);
+ align-items: center;
+ gap: 0.85rem;
+}
+
+.hardware-detail-gauge-wrap {
+ position: relative;
+ width: 170px;
+ height: 170px;
+}
+
+.hardware-detail-gauge-chart {
+ width: 170px;
+ height: 170px;
+}
+
+.hardware-detail-gauge-center {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 1.75rem;
+ font-weight: 700;
+}
+
+.hardware-detail-bar-list {
+ display: grid;
+ gap: 0.5rem;
+}
+
+.hardware-detail-bar-item,
+.hardware-detail-temp-item,
+.hardware-detail-list-item {
+ display: grid;
+ gap: 0.25rem;
+}
+
+.hardware-detail-bar-item .p-progressbar,
+.hardware-detail-temp-item .p-progressbar,
+.hardware-detail-list-item .p-progressbar {
+ height: 0.38rem;
+}
+
+.hardware-detail-page .p-progressbar .p-progressbar-value {
+ background: #b07a24;
+}
+
+.hardware-detail-bar-head {
+ display: flex;
+ justify-content: space-between;
+ gap: 0.5rem;
+ align-items: baseline;
+ font-size: 0.88rem;
+}
+
+.hardware-detail-scroll-list {
+ max-height: 12rem;
+ overflow: auto;
+ margin-top: 0.7rem;
+ padding-right: 0.2rem;
+ display: grid;
+ gap: 0.5rem;
+}
+
+.hardware-detail-core-grid {
+ margin-top: 0.65rem;
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 0.45rem 0.55rem;
+}
+
+.hardware-detail-core-item {
+ border: 1px solid var(--rip-border);
+ border-radius: 0.35rem;
+ background: #ffffff;
+ padding: 0.35rem 0.42rem;
+ display: grid;
+ gap: 0.15rem;
+}
+
+.hardware-detail-core-item .p-progressbar {
+ height: 0.26rem;
+}
+
+.hardware-detail-scroll-item {
+ display: grid;
+ gap: 0.2rem;
+}
+
+.hardware-detail-meter-wrap {
+ margin-top: 0.8rem;
+ border-top: 1px solid var(--surface-border);
+ padding-top: 0.65rem;
+ display: grid;
+ gap: 0.45rem;
+}
+
+.hardware-detail-meter-wrap .p-progressbar {
+ height: 0.38rem;
+}
+
+.hardware-detail-meter-head {
+ display: flex;
+ justify-content: space-between;
+ gap: 0.5rem;
+}
+
+.hardware-detail-list {
+ display: grid;
+ gap: 0.65rem;
+}
+
+.hardware-detail-list-item small {
+ color: var(--rip-muted);
+}
+
+.hardware-detail-list-item.tone-warn .p-progressbar-value {
+ background: linear-gradient(90deg, #d5a242, #e0b25f);
+}
+
+.hardware-detail-list-item.tone-high .p-progressbar-value {
+ background: linear-gradient(90deg, #d9924d, #c97931);
+}
+
+.hardware-detail-list-item.tone-critical .p-progressbar-value {
+ background: linear-gradient(90deg, #c64d37, #ad3a2f);
+}
+
+.hardware-history-card {
+ border: 1px solid var(--rip-border);
+ background: #ffffff;
+}
+
+.hardware-history-card-head {
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.65rem;
+}
+
+.hardware-history-window-buttons {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 0.4rem;
+}
+
+.hardware-history-window-buttons .p-button {
+ min-width: 3.2rem;
+}
+
+.hardware-history-grid {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 0.85rem;
+ min-width: 0;
+}
+
+.hardware-history-chart-wrap {
+ border: 1px solid var(--rip-border);
+ border-radius: 0.45rem;
+ background: #ffffff;
+ padding: 0.6rem;
+ min-width: 0;
+ overflow: hidden;
+}
+
+.hardware-history-chart-wrap h4 {
+ margin: 0 0 0.5rem;
+ font-size: 0.9rem;
+}
+
+.hardware-history-series-toggles {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 0.35rem;
+ margin-bottom: 0.5rem;
+}
+
+.hardware-history-series-toggles .p-button {
+ min-height: 1.9rem;
+ padding: 0.2rem 0.55rem;
+ font-size: 0.78rem;
+}
+
+.hardware-history-series-toggles .p-button.hardware-series-toggle-btn {
+ box-shadow: none;
+}
+
+.hardware-history-series-toggles .p-button.hardware-series-toggle-btn:focus {
+ box-shadow: 0 0 0 1px rgba(58, 29, 18, 0.18);
+}
+
+.hardware-history-chart {
+ position: relative;
+ height: 320px;
+ width: 100%;
+ min-width: 0;
+ overflow: hidden;
+}
+
+.hardware-history-chart canvas {
+ display: block;
+}
+
+.hardware-history-chart .hardware-history-chart-canvas,
+.hardware-history-chart .hardware-history-chart-canvas canvas {
+ height: 100% !important;
+}
+
+.hardware-history-chart .hardware-history-chart-canvas canvas {
+ width: 100% !important;
+}
+
+.hardware-history-legend-row {
+ margin-top: 0.45rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.8rem;
+ flex-wrap: wrap;
+ color: var(--rip-muted);
+ font-weight: 600;
+}
+
+.hardware-history-legend-item {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.35rem;
+}
+
+.hardware-history-legend-dot {
+ width: 0.62rem;
+ height: 0.62rem;
+ border-radius: 2px;
+ display: inline-block;
+}
+
+@media (max-width: 1700px) {
+ .hardware-history-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (max-width: 1900px) {
+ .hardware-detail-grid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+@media (max-width: 1500px) {
+ .hardware-detail-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (max-width: 980px) {
+ .hardware-detail-grid,
+ .hardware-detail-gauge-layout {
+ grid-template-columns: 1fr;
+ }
+
+ .hardware-detail-core-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .hardware-detail-gauge-wrap {
+ margin-inline: auto;
+ }
+
+ .hardware-detail-card h3 {
+ font-size: 0.95rem;
+ }
+}
+
/* ===== Converter Page ===== */
+.converter-beta-notice {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.55rem;
+ padding: 0.75rem 0.9rem;
+ border-radius: 10px;
+ border: 1px solid #f5d28a;
+ background: #fff8e7;
+ color: #7a4b00;
+ font-size: 0.92rem;
+ line-height: 1.45;
+}
+
+.converter-beta-notice .pi {
+ margin-top: 0.05rem;
+ color: #d17d00;
+}
+
.converter-card-header {
display: flex;
align-items: center;
diff --git a/frontend/src/utils/statusPresentation.js b/frontend/src/utils/statusPresentation.js
index ba07d2c..886c686 100644
--- a/frontend/src/utils/statusPresentation.js
+++ b/frontend/src/utils/statusPresentation.js
@@ -2,6 +2,7 @@ const STATUS_LABELS = {
IDLE: 'Bereit',
DISC_DETECTED: 'Medium erkannt',
ANALYZING: 'Analyse',
+ METADATA_LOOKUP: 'TMDb-Suche',
METADATA_SELECTION: 'Metadatenauswahl',
WAITING_FOR_USER_DECISION: 'Warte auf Auswahl',
READY_TO_START: 'Startbereit',
@@ -46,6 +47,7 @@ const FALLBACK_TOKEN_LABELS = {
ENCODE: 'encodieren',
ENCODING: 'encodieren',
ANALYZING: 'analyse',
+ LOOKUP: 'suche',
METADATA: 'metadaten',
SELECTION: 'auswahl',
WAITING: 'warte',
@@ -120,6 +122,7 @@ export function getStatusSeverity(status, options = {}) {
normalized === 'RIPPING'
|| normalized === 'ENCODING'
|| normalized === 'ANALYZING'
+ || normalized === 'METADATA_LOOKUP'
|| normalized === 'MEDIAINFO_CHECK'
|| normalized === 'METADATA_SELECTION'
|| normalized === 'POST_ENCODE_SCRIPTS'
@@ -154,5 +157,6 @@ export const STATUS_FILTER_OPTIONS = [
{ label: getStatusLabel('RIPPING'), value: 'RIPPING' },
{ label: getStatusLabel('ENCODING'), value: 'ENCODING' },
{ label: getStatusLabel('ANALYZING'), value: 'ANALYZING' },
+ { label: getStatusLabel('METADATA_LOOKUP'), value: 'METADATA_LOOKUP' },
{ label: getStatusLabel('METADATA_SELECTION'), value: 'METADATA_SELECTION' }
];
diff --git a/package-lock.json b/package-lock.json
index 37caf62..1be7ce6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ripster",
- "version": "1.0.0-rc1",
+ "version": "1.0.0-rc2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ripster",
- "version": "1.0.0-rc1",
+ "version": "1.0.0-rc2",
"devDependencies": {
"concurrently": "^9.1.2"
}
diff --git a/package.json b/package.json
index 49a50ac..1efa575 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "ripster",
"private": true,
- "version": "1.0.0-rc1",
+ "version": "1.0.0-rc2",
"scripts": {
"dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"",
"dev:backend": "npm run dev --prefix backend",
diff --git a/setup.sh b/setup.sh
old mode 100644
new mode 100755